Merge remote branch 'buildsau/master'
[profile/ivi/genivi/genivi-audio-manager.git] / AudioManagerDaemon / test / AmRouterTest / CAmRouterTest.cpp
1 /**
2  * Copyright (C) 2011, BMW AG
3  *
4  * GeniviAudioMananger AudioManagerDaemon
5  *
6  * \file databasetest.cpp
7  *
8  * \date 20-Oct-2011 3:42:04 PM
9  * \author Christian Mueller (christian.ei.mueller@bmw.de)
10  *
11  * \section License
12  * GNU Lesser General Public License, version 2.1, with special exception (GENIVI clause)
13  * Copyright (C) 2011, BMW AG Christian Mueller  Christian.ei.mueller@bmw.de
14  *
15  * This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
16  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License, version 2.1, for more details.
17  * You should have received a copy of the GNU Lesser General Public License, version 2.1, along with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
18  * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may also be applicable to programs even in cases in which the program is not a library in the technical sense.
19  * Linking AudioManager statically or dynamically with other modules is making a combined work based on AudioManager. You may license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to license your linked modules under the GNU Lesser General Public License, version 2.1, you may use the program under the following exception.
20  * As a special exception, the copyright holders of AudioManager give you permission to combine AudioManager with software programs or libraries that are released under any license unless such a combination is not permitted by the license of such a software program or library. You may copy and distribute such a system following the terms of the GNU Lesser General Public License, version 2.1, including this special exception, for AudioManager and the licenses of the other code concerned.
21  * Note that people who make modified versions of AudioManager are not obligated to grant this special exception for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License, version 2.1, gives permission to release a modified version without this exception; this exception also makes it possible to release a modified version which carries forward this exception.
22  *
23  * THIS CODE HAS BEEN GENERATED BY ENTERPRISE ARCHITECT GENIVI MODEL. PLEASE CHANGE ONLY IN ENTERPRISE ARCHITECT AND GENERATE AGAIN
24  */
25
26 #include "CAmRouterTest.h"
27 #include <string.h>
28 #include "shared/CAmDltWrapper.h"
29
30 using namespace am;
31 using namespace testing;
32
33 CAmRouterTest::CAmRouterTest() :
34         plistRoutingPluginDirs(), //
35         plistCommandPluginDirs(), //
36         pSocketHandler(), //
37         pDatabaseHandler(std::string(":memory:")), //
38         pControlSender(std::string("")), //
39         pRouter(&pDatabaseHandler, &pControlSender), //
40         pRoutingSender(plistRoutingPluginDirs), //
41         pCommandSender(plistCommandPluginDirs), //
42         pMockInterface(), //
43         pMockControlInterface(), //
44         pRoutingInterfaceBackdoor(), //
45         pCommandInterfaceBackdoor(), //
46         pControlInterfaceBackdoor(), //
47         pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender,&pSocketHandler, &pRouter), //
48         pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler)
49 {
50     pDatabaseHandler.registerObserver(&pObserver);
51     pCommandInterfaceBackdoor.injectInterface(&pCommandSender, &pMockInterface);
52     pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface);
53 }
54
55 CAmRouterTest::~CAmRouterTest()
56 {
57 }
58
59 void CAmRouterTest::SetUp()
60 {
61     logInfo("Routing Test started ");
62 }
63
64 void CAmRouterTest::TearDown()
65 {
66 }
67
68 ACTION(returnConnectionFormat){
69 arg4=arg3;
70 }
71
72 //test that checks just sinks and source in a domain but connectionformats do not match
73 TEST_F(CAmRouterTest,simpleRoute2withDomainNoMatchFormats)
74 {
75     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
76
77     //initialize 2 domains
78     am_Domain_s domain1;
79     am_domainID_t domainID1;
80
81     domain1.domainID = 0;
82     domain1.name = "domain1";
83     domain1.busname = "domain1bus";
84     domain1.state = DS_CONTROLLED;
85
86     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
87
88     am_Source_s source;
89     am_sourceID_t sourceID;
90
91     source.domainID = domainID1;
92     source.name = "source1";
93     source.sourceState = SS_ON;
94     source.sourceID = 0;
95     source.sourceClassID = 5;
96     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
97
98     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
99
100     am_Sink_s sink;
101     am_sinkID_t sinkID;
102
103     sink.domainID = domainID1;
104     sink.name = "sink1";
105     sink.sinkID = 0;
106     sink.sinkClassID = 5;
107     sink.muteState = MS_MUTED;
108     sink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
109
110     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
111
112     std::vector<am_Route_s> listRoutes;
113     std::vector<am_RoutingElement_s> listRoutingElements;
114     am_RoutingElement_s hopp1;
115
116     hopp1.sinkID = sinkID;
117     hopp1.sourceID = sourceID;
118     hopp1.domainID = domainID1;
119     hopp1.connectionFormat = source.listConnectionFormats[0];
120
121     listRoutingElements.push_back(hopp1);
122
123     am_Route_s compareRoute;
124     compareRoute.route = listRoutingElements;
125     compareRoute.sinkID = sinkID;
126     compareRoute.sourceID = sourceID;
127
128     ASSERT_EQ(E_OK, pRouter.getRoute(true,sourceID,sinkID,listRoutes));
129     ASSERT_EQ(0, listRoutes.size());
130
131 }
132
133 //test that checks just sinks and source in a domain
134 TEST_F(CAmRouterTest,simpleRoute2withDomain)
135 {
136     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
137
138     //initialize 2 domains
139     am_Domain_s domain1;
140     am_domainID_t domainID1;
141
142     domain1.domainID = 0;
143     domain1.name = "domain1";
144     domain1.busname = "domain1bus";
145     domain1.state = DS_CONTROLLED;
146
147     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
148
149     am_Source_s source;
150     am_sourceID_t sourceID;
151
152     source.domainID = domainID1;
153     source.name = "source1";
154     source.sourceState = SS_ON;
155     source.sourceID = 0;
156     source.sourceClassID = 5;
157     source.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
158
159     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
160
161     am_Sink_s sink;
162     am_sinkID_t sinkID;
163
164     sink.domainID = domainID1;
165     sink.name = "sink1";
166     sink.sinkID = 0;
167     sink.sinkClassID = 5;
168     sink.muteState = MS_MUTED;
169     sink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
170
171     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
172
173     std::vector<am_Route_s> listRoutes;
174     std::vector<am_RoutingElement_s> listRoutingElements;
175     am_RoutingElement_s hopp1;
176
177     hopp1.sinkID = sinkID;
178     hopp1.sourceID = sourceID;
179     hopp1.domainID = domainID1;
180     hopp1.connectionFormat = source.listConnectionFormats[0];
181
182     listRoutingElements.push_back(hopp1);
183
184     am_Route_s compareRoute;
185     compareRoute.route = listRoutingElements;
186     compareRoute.sinkID = sinkID;
187     compareRoute.sourceID = sourceID;
188
189     ASSERT_EQ(E_OK, pRouter.getRoute(true,sourceID,sinkID,listRoutes));
190     ASSERT_EQ(1, listRoutes.size());
191     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
192
193 }
194
195 //test that checks just 2 domains, one sink one source with only one connection format each
196 TEST_F(CAmRouterTest,simpleRoute2DomainsOnlyFree)
197 {
198
199
200     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
201
202     //initialize 2 domains
203     am_Domain_s domain1, domain2;
204     am_domainID_t domainID1, domainID2;
205
206     domain1.domainID = 0;
207     domain1.name = "domain1";
208     domain1.busname = "domain1bus";
209     domain1.state = DS_CONTROLLED;
210     domain2.domainID = 0;
211     domain2.name = "domain2";
212     domain2.busname = "domain2bus";
213     domain2.state = DS_CONTROLLED;
214
215     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
216     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
217
218     am_Source_s source, gwSource;
219     am_sourceID_t sourceID, gwSourceID;
220
221     source.domainID = domainID1;
222     source.name = "source1";
223     source.sourceState = SS_ON;
224     source.sourceID = 0;
225     source.sourceClassID = 5;
226     source.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
227
228     gwSource.domainID = domainID2;
229     gwSource.name = "gwsource1";
230     gwSource.sourceState = SS_ON;
231     gwSource.sourceID = 0;
232     gwSource.sourceClassID = 5;
233     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
234
235     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
236     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
237
238     am_Sink_s sink, gwSink;
239     am_sinkID_t sinkID, gwSinkID;
240
241     sink.domainID = domainID2;
242     sink.name = "sink1";
243     sink.sinkID = 0;
244     sink.sinkClassID = 5;
245     sink.muteState = MS_MUTED;
246     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
247
248     gwSink.domainID = domainID1;
249     gwSink.name = "gwSink";
250     gwSink.sinkID = 0;
251     gwSink.sinkClassID = 5;
252     gwSink.muteState = MS_MUTED;
253     gwSink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
254
255     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
256     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
257
258     am_Gateway_s gateway;
259     am_gatewayID_t gatewayID;
260
261     gateway.controlDomainID = domainID1;
262     gateway.gatewayID = 0;
263     gateway.sinkID = gwSinkID;
264     gateway.sourceID = gwSourceID;
265     gateway.domainSourceID = domainID2;
266     gateway.domainSinkID = domainID1;
267     gateway.listSinkFormats = gwSink.listConnectionFormats;
268     gateway.listSourceFormats = gwSource.listConnectionFormats;
269     gateway.convertionMatrix.push_back(true);
270     gateway.name = "gateway";
271
272     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
273
274     std::vector<am_Route_s> listRoutes;
275     std::vector<am_RoutingElement_s> listRoutingElements;
276     am_RoutingElement_s hopp1;
277     am_RoutingElement_s hopp2;
278
279     hopp1.sinkID = gwSinkID;
280     hopp1.sourceID = sourceID;
281     hopp1.domainID = domainID1;
282     hopp1.connectionFormat = source.listConnectionFormats[0];
283
284     hopp2.sinkID = sinkID;
285     hopp2.sourceID = gwSourceID;
286     hopp2.domainID = domainID2;
287     hopp2.connectionFormat = sink.listConnectionFormats[0];
288
289     listRoutingElements.push_back(hopp1);
290     listRoutingElements.push_back(hopp2);
291
292     am_Route_s compareRoute;
293     compareRoute.route = listRoutingElements;
294     compareRoute.sinkID = sinkID;
295     compareRoute.sourceID = sourceID;
296
297     ASSERT_EQ(E_OK, pRouter.getRoute(true,sourceID,sinkID,listRoutes));
298     ASSERT_EQ(1, listRoutes.size());
299     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
300
301 }
302
303 //test that checks just 2 domains, one sink one source with only one connection format each
304 TEST_F(CAmRouterTest,simpleRoute2DomainsOnlyFreeNotFree)
305 {
306
307
308     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
309
310     //initialize 2 domains
311     am_Domain_s domain1, domain2;
312     am_domainID_t domainID1, domainID2;
313
314     domain1.domainID = 0;
315     domain1.name = "domain1";
316     domain1.busname = "domain1bus";
317     domain1.state = DS_CONTROLLED;
318     domain2.domainID = 0;
319     domain2.name = "domain2";
320     domain2.busname = "domain2bus";
321     domain2.state = DS_CONTROLLED;
322
323     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
324     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
325
326     am_Source_s source, gwSource;
327     am_sourceID_t sourceID, gwSourceID;
328
329     source.domainID = domainID1;
330     source.name = "source1";
331     source.sourceState = SS_ON;
332     source.sourceID = 0;
333     source.sourceClassID = 5;
334     source.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
335
336     gwSource.domainID = domainID2;
337     gwSource.name = "gwsource1";
338     gwSource.sourceState = SS_ON;
339     gwSource.sourceID = 0;
340     gwSource.sourceClassID = 5;
341     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
342
343     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
344     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
345
346     am_Sink_s sink, gwSink;
347     am_sinkID_t sinkID, gwSinkID;
348
349     sink.domainID = domainID2;
350     sink.name = "sink1";
351     sink.sinkID = 0;
352     sink.sinkClassID = 5;
353     sink.muteState = MS_MUTED;
354     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
355
356     gwSink.domainID = domainID1;
357     gwSink.name = "gwSink";
358     gwSink.sinkID = 0;
359     gwSink.sinkClassID = 5;
360     gwSink.muteState = MS_MUTED;
361     gwSink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
362
363     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
364     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
365
366     am_Gateway_s gateway;
367     am_gatewayID_t gatewayID;
368
369     gateway.controlDomainID = domainID1;
370     gateway.gatewayID = 0;
371     gateway.sinkID = gwSinkID;
372     gateway.sourceID = gwSourceID;
373     gateway.domainSourceID = domainID2;
374     gateway.domainSinkID = domainID1;
375     gateway.listSinkFormats = gwSink.listConnectionFormats;
376     gateway.listSourceFormats = gwSource.listConnectionFormats;
377     gateway.convertionMatrix.push_back(true);
378     gateway.name = "gateway";
379
380     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
381
382     std::vector<am_Route_s> listRoutes;
383     std::vector<am_RoutingElement_s> listRoutingElements;
384     am_RoutingElement_s hopp1;
385     am_RoutingElement_s hopp2;
386
387     hopp1.sinkID = gwSinkID;
388     hopp1.sourceID = sourceID;
389     hopp1.domainID = domainID1;
390     hopp1.connectionFormat = source.listConnectionFormats[0];
391
392     hopp2.sinkID = sinkID;
393     hopp2.sourceID = gwSourceID;
394     hopp2.domainID = domainID2;
395     hopp2.connectionFormat = sink.listConnectionFormats[0];
396
397     listRoutingElements.push_back(hopp1);
398     listRoutingElements.push_back(hopp2);
399
400     am_Route_s compareRoute;
401     compareRoute.route = listRoutingElements;
402     compareRoute.sinkID = sinkID;
403     compareRoute.sourceID = sourceID;
404
405     am_Connection_s connection,connection1;
406     am_connectionID_t id1,id2;
407     connection.sourceID=sourceID;
408     connection.sinkID=gwSinkID;
409     connection.connectionFormat=CF_GENIVI_ANALOG;
410     connection.connectionID=0;
411     connection1.sourceID=gwSourceID;
412     connection1.sinkID=sinkID;
413     connection1.connectionFormat=CF_GENIVI_ANALOG;
414     connection1.connectionID=0;
415
416     ASSERT_EQ(E_OK,pDatabaseHandler.enterConnectionDB(connection,id1));
417     ASSERT_EQ(E_OK,pDatabaseHandler.enterConnectionDB(connection1,id2));
418
419     ASSERT_EQ(E_OK, pRouter.getRoute(true,sourceID,sinkID,listRoutes));
420     ASSERT_EQ(0, listRoutes.size());
421
422     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
423     ASSERT_EQ(1, listRoutes.size());
424     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
425 }
426
427 //test that checks 3 domains, one sink one source, longer lists of connectionformats.
428 TEST_F(CAmRouterTest,simpleRoute3DomainsListConnectionFormats_2)
429 {
430
431     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
432
433     //initialize 2 domains
434     am_Domain_s domain1, domain2, domain3;
435     am_domainID_t domainID1, domainID2, domainID3;
436
437     domain1.domainID = 0;
438     domain1.name = "domain1";
439     domain1.busname = "domain1bus";
440     domain1.state = DS_CONTROLLED;
441     domain2.domainID = 0;
442     domain2.name = "domain2";
443     domain2.busname = "domain2bus";
444     domain2.state = DS_CONTROLLED;
445     domain3.domainID = 0;
446     domain3.name = "domain3";
447     domain3.busname = "domain3bus";
448     domain3.state = DS_CONTROLLED;
449
450     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
451     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
452     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
453
454     am_Source_s source, gwSource, gwSource1;
455     am_sourceID_t sourceID, gwSourceID, gwSourceID1;
456
457     source.domainID = domainID1;
458     source.name = "source1";
459     source.sourceState = SS_ON;
460     source.sourceID = 0;
461     source.sourceClassID = 5;
462     source.listConnectionFormats.push_back(CF_GENIVI_STEREO);
463     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
464
465     gwSource.domainID = domainID2;
466     gwSource.name = "gwsource1";
467     gwSource.sourceState = SS_ON;
468     gwSource.sourceID = 0;
469     gwSource.sourceClassID = 5;
470     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
471     gwSource.listConnectionFormats.push_back(CF_GENIVI_STEREO);
472     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
473
474     gwSource1.domainID = domainID3;
475     gwSource1.name = "gwsource2";
476     gwSource1.sourceState = SS_ON;
477     gwSource1.sourceID = 0;
478     gwSource1.sourceClassID = 5;
479     gwSource1.listConnectionFormats.push_back(CF_GENIVI_STEREO);
480     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
481
482     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
483     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
484     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
485
486     am_Sink_s sink, gwSink, gwSink1;
487     am_sinkID_t sinkID, gwSinkID, gwSinkID1;
488
489     sink.domainID = domainID3;
490     sink.name = "sink1";
491     sink.sinkID = 0;
492     sink.sinkClassID = 5;
493     sink.muteState = MS_MUTED;
494     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
495
496     gwSink.domainID = domainID1;
497     gwSink.name = "gwSink";
498     gwSink.sinkID = 0;
499     gwSink.sinkClassID = 5;
500     gwSink.muteState = MS_MUTED;
501     gwSink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
502     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
503
504     gwSink1.domainID = domainID2;
505     gwSink1.name = "gwSink1";
506     gwSink1.sinkID = 0;
507     gwSink1.sinkClassID = 5;
508     gwSink1.muteState = MS_MUTED;
509     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
510     gwSink1.listConnectionFormats.push_back(CF_GENIVI_STEREO);
511
512     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
513     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
514     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
515
516     am_Gateway_s gateway, gateway1;
517     am_gatewayID_t gatewayID, gatewayID1;
518
519     gateway.controlDomainID = domainID1;
520     gateway.gatewayID = 0;
521     gateway.sinkID = gwSinkID;
522     gateway.sourceID = gwSourceID;
523     gateway.domainSourceID = domainID2;
524     gateway.domainSinkID = domainID1;
525     gateway.listSinkFormats = gwSink.listConnectionFormats;
526     gateway.listSourceFormats = gwSource.listConnectionFormats;
527     gateway.convertionMatrix.push_back(false);
528     gateway.convertionMatrix.push_back(false);
529     gateway.convertionMatrix.push_back(false);
530     gateway.convertionMatrix.push_back(true);
531     gateway.convertionMatrix.push_back(true);
532     gateway.convertionMatrix.push_back(false);
533     gateway.name = "gateway";
534
535     gateway1.controlDomainID = domainID2;
536     gateway1.gatewayID = 0;
537     gateway1.sinkID = gwSinkID1;
538     gateway1.sourceID = gwSourceID1;
539     gateway1.domainSourceID = domainID3;
540     gateway1.domainSinkID = domainID2;
541     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
542     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
543     gateway1.convertionMatrix.push_back(false);
544     gateway1.convertionMatrix.push_back(false);
545     gateway1.convertionMatrix.push_back(false);
546     gateway1.convertionMatrix.push_back(true);
547     gateway1.name = "gateway1";
548
549     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
550     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
551
552     std::vector<am_Route_s> listRoutes;
553     std::vector<am_RoutingElement_s> listRoutingElements;
554     am_RoutingElement_s hopp1;
555     am_RoutingElement_s hopp2;
556     am_RoutingElement_s hopp3;
557
558     hopp1.sourceID = sourceID;
559     hopp1.sinkID = gwSinkID;
560     hopp1.domainID = domainID1;
561     hopp1.connectionFormat = source.listConnectionFormats[1];
562
563     hopp2.sourceID = gwSourceID;
564     hopp2.sinkID = gwSinkID1;
565     hopp2.domainID = domainID2;
566     hopp2.connectionFormat = gwSink1.listConnectionFormats[1];
567
568     hopp3.sourceID = gwSourceID1;
569     hopp3.sinkID = sinkID;
570     hopp3.domainID = domainID3;
571     hopp3.connectionFormat = sink.listConnectionFormats[0];
572
573     listRoutingElements.push_back(hopp1);
574     listRoutingElements.push_back(hopp2);
575     listRoutingElements.push_back(hopp3);
576
577     am_Route_s compareRoute;
578     compareRoute.route = listRoutingElements;
579     compareRoute.sinkID = sinkID;
580     compareRoute.sourceID = sourceID;
581
582     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
583     ASSERT_EQ(1, listRoutes.size());
584     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
585 }
586
587 //test that checks 3 domains, one sink one source, longer lists of connectionformats.
588 TEST_F(CAmRouterTest,simpleRoute3DomainsListConnectionFormats_1)
589 {
590     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
591
592     //initialize 2 domains
593     am_Domain_s domain1, domain2, domain3;
594     am_domainID_t domainID1, domainID2, domainID3;
595
596     domain1.domainID = 0;
597     domain1.name = "domain1";
598     domain1.busname = "domain1bus";
599     domain1.state = DS_CONTROLLED;
600     domain2.domainID = 0;
601     domain2.name = "domain2";
602     domain2.busname = "domain2bus";
603     domain2.state = DS_CONTROLLED;
604     domain3.domainID = 0;
605     domain3.name = "domain3";
606     domain3.busname = "domain3bus";
607     domain3.state = DS_CONTROLLED;
608
609     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
610     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
611     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
612
613     am_Source_s source, gwSource, gwSource1;
614     am_sourceID_t sourceID, gwSourceID, gwSourceID1;
615
616     source.domainID = domainID1;
617     source.name = "source1";
618     source.sourceState = SS_ON;
619     source.sourceID = 0;
620     source.sourceClassID = 5;
621     source.listConnectionFormats.push_back(CF_GENIVI_STEREO);
622     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
623
624     gwSource.domainID = domainID2;
625     gwSource.name = "gwsource1";
626     gwSource.sourceState = SS_ON;
627     gwSource.sourceID = 0;
628     gwSource.sourceClassID = 5;
629     gwSource.listConnectionFormats.push_back(CF_GENIVI_STEREO);
630     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
631     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
632
633     gwSource1.domainID = domainID3;
634     gwSource1.name = "gwsource2";
635     gwSource1.sourceState = SS_ON;
636     gwSource1.sourceID = 0;
637     gwSource1.sourceClassID = 5;
638     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
639
640     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
641     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
642     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
643
644     am_Sink_s sink, gwSink, gwSink1;
645     am_sinkID_t sinkID, gwSinkID, gwSinkID1;
646
647     sink.domainID = domainID3;
648     sink.name = "sink1";
649     sink.sinkID = 0;
650     sink.sinkClassID = 5;
651     sink.muteState = MS_MUTED;
652     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
653
654     gwSink.domainID = domainID1;
655     gwSink.name = "gwSink";
656     gwSink.sinkID = 0;
657     gwSink.sinkClassID = 5;
658     gwSink.muteState = MS_MUTED;
659     gwSink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
660     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
661
662     gwSink1.domainID = domainID2;
663     gwSink1.name = "gwSink1";
664     gwSink1.sinkID = 0;
665     gwSink1.sinkClassID = 5;
666     gwSink1.muteState = MS_MUTED;
667     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
668
669     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
670     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
671     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
672
673     am_Gateway_s gateway, gateway1;
674     am_gatewayID_t gatewayID, gatewayID1;
675
676     gateway.controlDomainID = domainID1;
677     gateway.gatewayID = 0;
678     gateway.sinkID = gwSinkID;
679     gateway.sourceID = gwSourceID;
680     gateway.domainSourceID = domainID2;
681     gateway.domainSinkID = domainID1;
682     gateway.listSinkFormats = gwSink.listConnectionFormats;
683     gateway.listSourceFormats = gwSource.listConnectionFormats;
684     gateway.convertionMatrix.push_back(false);
685     gateway.convertionMatrix.push_back(false);
686     gateway.convertionMatrix.push_back(false);
687     gateway.convertionMatrix.push_back(false);
688     gateway.convertionMatrix.push_back(true);
689     gateway.convertionMatrix.push_back(false);
690     gateway.name = "gateway";
691
692     gateway1.controlDomainID = domainID2;
693     gateway1.gatewayID = 0;
694     gateway1.sinkID = gwSinkID1;
695     gateway1.sourceID = gwSourceID1;
696     gateway1.domainSourceID = domainID3;
697     gateway1.domainSinkID = domainID2;
698     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
699     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
700     gateway1.convertionMatrix.push_back(true);
701     gateway1.name = "gateway";
702
703     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
704     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
705
706     std::vector<am_Route_s> listRoutes;
707     std::vector<am_RoutingElement_s> listRoutingElements;
708     am_RoutingElement_s hopp1;
709     am_RoutingElement_s hopp2;
710     am_RoutingElement_s hopp3;
711
712     hopp1.sourceID = sourceID;
713     hopp1.sinkID = gwSinkID;
714     hopp1.domainID = domainID1;
715     hopp1.connectionFormat = source.listConnectionFormats[0];
716
717     hopp2.sourceID = gwSourceID;
718     hopp2.sinkID = gwSinkID1;
719     hopp2.domainID = domainID2;
720     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
721
722     hopp3.sourceID = gwSourceID1;
723     hopp3.sinkID = sinkID;
724     hopp3.domainID = domainID3;
725     hopp3.connectionFormat = sink.listConnectionFormats[0];
726
727     listRoutingElements.push_back(hopp1);
728     listRoutingElements.push_back(hopp2);
729     listRoutingElements.push_back(hopp3);
730
731     am_Route_s compareRoute;
732     compareRoute.route = listRoutingElements;
733     compareRoute.sinkID = sinkID;
734     compareRoute.sourceID = sourceID;
735
736     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
737     ASSERT_EQ(1, listRoutes.size());
738     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
739 }
740
741
742 //test that checks 3 domains, one sink one source, longer lists of connectionformats.
743 TEST_F(CAmRouterTest,simpleRoute3DomainsListConnectionFormats)
744 {
745     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
746
747     //initialize 2 domains
748     am_Domain_s domain1, domain2, domain3;
749     am_domainID_t domainID1, domainID2, domainID3;
750
751     domain1.domainID = 0;
752     domain1.name = "domain1";
753     domain1.busname = "domain1bus";
754     domain1.state = DS_CONTROLLED;
755     domain2.domainID = 0;
756     domain2.name = "domain2";
757     domain2.busname = "domain2bus";
758     domain2.state = DS_CONTROLLED;
759     domain3.domainID = 0;
760     domain3.name = "domain3";
761     domain3.busname = "domain3bus";
762     domain3.state = DS_CONTROLLED;
763
764     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
765     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
766     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
767
768     am_Source_s source, gwSource, gwSource1;
769     am_sourceID_t sourceID, gwSourceID, gwSourceID1;
770
771     source.domainID = domainID1;
772     source.name = "source1";
773     source.sourceState = SS_ON;
774     source.sourceID = 0;
775     source.sourceClassID = 5;
776     source.listConnectionFormats.push_back(CF_GENIVI_STEREO);
777     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
778
779     gwSource.domainID = domainID2;
780     gwSource.name = "gwsource1";
781     gwSource.sourceState = SS_ON;
782     gwSource.sourceID = 0;
783     gwSource.sourceClassID = 5;
784     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
785
786     gwSource1.domainID = domainID3;
787     gwSource1.name = "gwsource2";
788     gwSource1.sourceState = SS_ON;
789     gwSource1.sourceID = 0;
790     gwSource1.sourceClassID = 5;
791     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
792
793     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
794     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
795     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
796
797     am_Sink_s sink, gwSink, gwSink1;
798     am_sinkID_t sinkID, gwSinkID, gwSinkID1;
799
800     sink.domainID = domainID3;
801     sink.name = "sink1";
802     sink.sinkID = 0;
803     sink.sinkClassID = 5;
804     sink.muteState = MS_MUTED;
805     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
806
807     gwSink.domainID = domainID1;
808     gwSink.name = "gwSink";
809     gwSink.sinkID = 0;
810     gwSink.sinkClassID = 5;
811     gwSink.muteState = MS_MUTED;
812     gwSink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
813     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
814
815     gwSink1.domainID = domainID2;
816     gwSink1.name = "gwSink1";
817     gwSink1.sinkID = 0;
818     gwSink1.sinkClassID = 5;
819     gwSink1.muteState = MS_MUTED;
820     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
821
822     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
823     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
824     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
825
826     am_Gateway_s gateway, gateway1;
827     am_gatewayID_t gatewayID, gatewayID1;
828
829     gateway.controlDomainID = domainID1;
830     gateway.gatewayID = 0;
831     gateway.sinkID = gwSinkID;
832     gateway.sourceID = gwSourceID;
833     gateway.domainSourceID = domainID2;
834     gateway.domainSinkID = domainID1;
835     gateway.listSinkFormats = gwSink.listConnectionFormats;
836     gateway.listSourceFormats = gwSource.listConnectionFormats;
837     gateway.convertionMatrix.push_back(false);
838     gateway.convertionMatrix.push_back(true);
839     gateway.name = "gateway";
840
841     gateway1.controlDomainID = domainID2;
842     gateway1.gatewayID = 0;
843     gateway1.sinkID = gwSinkID1;
844     gateway1.sourceID = gwSourceID1;
845     gateway1.domainSourceID = domainID3;
846     gateway1.domainSinkID = domainID2;
847     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
848     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
849     gateway1.convertionMatrix.push_back(true);
850     gateway1.name = "gateway";
851
852     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
853     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
854
855     std::vector<am_Route_s> listRoutes;
856     std::vector<am_RoutingElement_s> listRoutingElements;
857     am_RoutingElement_s hopp1;
858     am_RoutingElement_s hopp2;
859     am_RoutingElement_s hopp3;
860
861     hopp1.sourceID = sourceID;
862     hopp1.sinkID = gwSinkID;
863     hopp1.domainID = domainID1;
864     hopp1.connectionFormat = source.listConnectionFormats[1];
865
866     hopp2.sourceID = gwSourceID;
867     hopp2.sinkID = gwSinkID1;
868     hopp2.domainID = domainID2;
869     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
870
871     hopp3.sourceID = gwSourceID1;
872     hopp3.sinkID = sinkID;
873     hopp3.domainID = domainID3;
874     hopp3.connectionFormat = sink.listConnectionFormats[0];
875
876     listRoutingElements.push_back(hopp1);
877     listRoutingElements.push_back(hopp2);
878     listRoutingElements.push_back(hopp3);
879
880     am_Route_s compareRoute;
881     compareRoute.route = listRoutingElements;
882     compareRoute.sinkID = sinkID;
883     compareRoute.sourceID = sourceID;
884
885     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
886     ASSERT_EQ(1, listRoutes.size());
887     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
888 }
889
890
891 //test that checks 4 domains, one sink and one source but there are 2 routes because there are 2 gateways
892 TEST_F(CAmRouterTest,simpleRoute4Domains2Routes)
893 {
894     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
895
896     //initialize 2 domains
897     am_Domain_s domain1, domain2, domain3, domain4;
898     am_domainID_t domainID1, domainID2, domainID3, domainID4;
899
900     domain1.domainID = 0;
901     domain1.name = "domain1";
902     domain1.busname = "domain1bus";
903     domain1.state = DS_CONTROLLED;
904     domain2.domainID = 0;
905     domain2.name = "domain2";
906     domain2.busname = "domain2bus";
907     domain2.state = DS_CONTROLLED;
908     domain3.domainID = 0;
909     domain3.name = "domain3";
910     domain3.busname = "domain3bus";
911     domain3.state = DS_CONTROLLED;
912     domain4.domainID = 0;
913     domain4.name = "domain4";
914     domain4.busname = "domain4bus";
915     domain4.state = DS_CONTROLLED;
916
917     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
918     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
919     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
920     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain4,domainID4));
921
922     am_Source_s source, gwSource, gwSource1, gwSource2, gwSource3;
923     am_sourceID_t sourceID, gwSourceID, gwSourceID1, gwSourceID2, gwSourceID3;
924
925     source.domainID = domainID1;
926     source.name = "source1";
927     source.sourceState = SS_ON;
928     source.sourceID = 0;
929     source.sourceClassID = 5;
930     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
931
932     gwSource.domainID = domainID2;
933     gwSource.name = "gwsource1";
934     gwSource.sourceState = SS_ON;
935     gwSource.sourceID = 0;
936     gwSource.sourceClassID = 5;
937     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
938
939     gwSource1.domainID = domainID3;
940     gwSource1.name = "gwsource2";
941     gwSource1.sourceState = SS_ON;
942     gwSource1.sourceID = 0;
943     gwSource1.sourceClassID = 5;
944     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
945
946     gwSource2.domainID = domainID4;
947     gwSource2.name = "gwsource3";
948     gwSource2.sourceState = SS_OFF;
949     gwSource2.sourceID = 0;
950     gwSource2.sourceClassID = 5;
951     gwSource2.listConnectionFormats.push_back(CF_GENIVI_STEREO);
952
953     gwSource3.domainID = domainID3;
954     gwSource3.name = "gwsource4";
955     gwSource3.sourceState = SS_OFF;
956     gwSource3.sourceID = 0;
957     gwSource3.sourceClassID = 5;
958     gwSource3.listConnectionFormats.push_back(CF_GENIVI_MONO);
959
960     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
961     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
962     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
963     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource2,gwSourceID2));
964     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource3,gwSourceID3));
965
966     am_Sink_s sink, gwSink, gwSink1, gwSink2, gwSink3;
967     am_sinkID_t sinkID, gwSinkID, gwSinkID1, gwSinkID2, gwSinkID3;
968
969     gwSink.domainID = domainID1;
970     gwSink.name = "gwSink";
971     gwSink.sinkID = 0;
972     gwSink.sinkClassID = 5;
973     gwSink.muteState = MS_MUTED;
974     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
975
976     gwSink1.domainID = domainID2;
977     gwSink1.name = "gwSink1";
978     gwSink1.sinkID = 0;
979     gwSink1.sinkClassID = 5;
980     gwSink1.muteState = MS_MUTED;
981     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
982
983     gwSink2.domainID = domainID3;
984     gwSink2.name = "gwSink2";
985     gwSink2.sinkID = 0;
986     gwSink2.sinkClassID = 5;
987     gwSink2.muteState = MS_MUTED;
988     gwSink2.listConnectionFormats.push_back(CF_GENIVI_MONO);
989
990     gwSink3.domainID = domainID2;
991     gwSink3.name = "gwSink3";
992     gwSink3.sinkID = 0;
993     gwSink3.sinkClassID = 5;
994     gwSink3.muteState = MS_MUTED;
995     gwSink3.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
996
997     sink.domainID = domainID4;
998     sink.name = "sink1";
999     sink.sinkID = 0;
1000     sink.sinkClassID = 5;
1001     sink.muteState = MS_MUTED;
1002     sink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
1003
1004     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1005     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1006     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
1007     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink2,gwSinkID2));
1008     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink3,gwSinkID3));
1009
1010     am_Gateway_s gateway, gateway1, gateway2, gateway3;
1011     am_gatewayID_t gatewayID, gatewayID1, gatewayID2, gatewayID3;
1012
1013     gateway.controlDomainID = domainID1;
1014     gateway.gatewayID = 0;
1015     gateway.sinkID = gwSinkID;
1016     gateway.sourceID = gwSourceID;
1017     gateway.domainSourceID = domainID2;
1018     gateway.domainSinkID = domainID1;
1019     gateway.listSinkFormats = gwSink.listConnectionFormats;
1020     gateway.listSourceFormats = gwSource.listConnectionFormats;
1021     gateway.convertionMatrix.push_back(true);
1022     gateway.name = "gateway";
1023
1024     gateway1.controlDomainID = domainID2;
1025     gateway1.gatewayID = 0;
1026     gateway1.sinkID = gwSinkID1;
1027     gateway1.sourceID = gwSourceID1;
1028     gateway1.domainSourceID = domainID3;
1029     gateway1.domainSinkID = domainID2;
1030     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
1031     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
1032     gateway1.convertionMatrix.push_back(true);
1033     gateway1.name = "gateway1";
1034
1035     gateway2.controlDomainID = domainID3;
1036     gateway2.gatewayID = 0;
1037     gateway2.sinkID = gwSinkID2;
1038     gateway2.sourceID = gwSourceID2;
1039     gateway2.domainSourceID = domainID4;
1040     gateway2.domainSinkID = domainID3;
1041     gateway2.listSinkFormats = gwSink2.listConnectionFormats;
1042     gateway2.listSourceFormats = gwSource2.listConnectionFormats;
1043     gateway2.convertionMatrix.push_back(true);
1044     gateway2.name = "gateway2";
1045
1046     gateway3.controlDomainID = domainID2;
1047     gateway3.gatewayID = 0;
1048     gateway3.sinkID = gwSinkID3;
1049     gateway3.sourceID = gwSourceID3;
1050     gateway3.domainSourceID = domainID3;
1051     gateway3.domainSinkID = domainID2;
1052     gateway3.listSinkFormats = gwSink3.listConnectionFormats;
1053     gateway3.listSourceFormats = gwSource3.listConnectionFormats;
1054     gateway3.convertionMatrix.push_back(true);
1055     gateway3.name = "gateway3";
1056
1057     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1058     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
1059     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway2,gatewayID2));
1060     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway3,gatewayID3));
1061
1062     std::vector<am_Route_s> listRoutes;
1063     std::vector<am_RoutingElement_s> listRoutingElements, listRoutingElements1;
1064     am_RoutingElement_s hopp1;
1065     am_RoutingElement_s hopp2;
1066     am_RoutingElement_s hopp3;
1067     am_RoutingElement_s hopp4;
1068     am_RoutingElement_s hopp2alt;
1069     am_RoutingElement_s hopp3alt;
1070
1071     hopp1.sourceID = sourceID;
1072     hopp1.sinkID = gwSinkID;
1073     hopp1.domainID = domainID1;
1074     hopp1.connectionFormat = source.listConnectionFormats[0];
1075
1076     hopp2.sourceID = gwSourceID;
1077     hopp2.sinkID = gwSinkID1;
1078     hopp2.domainID = domainID2;
1079     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
1080
1081     hopp3.sourceID = gwSourceID1;
1082     hopp3.sinkID = gwSinkID2;
1083     hopp3.domainID = domainID3;
1084     hopp3.connectionFormat = gwSink2.listConnectionFormats[0];
1085
1086     hopp4.sourceID = gwSourceID2;
1087     hopp4.sinkID = sinkID;
1088     hopp4.domainID = domainID4;
1089     hopp4.connectionFormat = sink.listConnectionFormats[0];
1090
1091     hopp2alt.sourceID = gwSourceID;
1092     hopp2alt.sinkID = gwSinkID3;
1093     hopp2alt.domainID = domainID2;
1094     hopp2alt.connectionFormat = gwSink3.listConnectionFormats[0];
1095
1096     hopp3alt.sourceID = gwSourceID3;
1097     hopp3alt.sinkID = gwSinkID2;
1098     hopp3alt.domainID = domainID3;
1099     hopp3alt.connectionFormat = gwSink2.listConnectionFormats[0];
1100
1101     listRoutingElements.push_back(hopp1);
1102     listRoutingElements.push_back(hopp2);
1103     listRoutingElements.push_back(hopp3);
1104     listRoutingElements.push_back(hopp4);
1105     listRoutingElements1.push_back(hopp1);
1106     listRoutingElements1.push_back(hopp2alt);
1107     listRoutingElements1.push_back(hopp3alt);
1108     listRoutingElements1.push_back(hopp4);
1109
1110     am_Route_s compareRoute, compareRoute1;
1111     compareRoute.route = listRoutingElements;
1112     compareRoute.sinkID = sinkID;
1113     compareRoute.sourceID = sourceID;
1114
1115     compareRoute1.route = listRoutingElements1;
1116     compareRoute1.sinkID = sinkID;
1117     compareRoute1.sourceID = sourceID;
1118
1119     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1120     ASSERT_EQ(2, listRoutes.size());
1121     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
1122     ASSERT_TRUE(pCF.compareRoute(compareRoute1,listRoutes[1]));
1123 }
1124
1125 //test that checks 3 domains, one sink one source but the connectionformat of third domains do not fit.
1126 TEST_F(CAmRouterTest,simpleRoute3DomainsNoConnection)
1127 {
1128
1129     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
1130
1131     //initialize 2 domains
1132     am_Domain_s domain1, domain2, domain3;
1133     am_domainID_t domainID1, domainID2, domainID3;
1134
1135     domain1.domainID = 0;
1136     domain1.name = "domain1";
1137     domain1.busname = "domain1bus";
1138     domain1.state = DS_CONTROLLED;
1139     domain2.domainID = 0;
1140     domain2.name = "domain2";
1141     domain2.busname = "domain2bus";
1142     domain2.state = DS_CONTROLLED;
1143     domain3.domainID = 0;
1144     domain3.name = "domain3";
1145     domain3.busname = "domain3bus";
1146     domain3.state = DS_CONTROLLED;
1147
1148     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
1149     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
1150     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
1151
1152     am_Source_s source, gwSource, gwSource1;
1153     am_sourceID_t sourceID, gwSourceID, gwSourceID1;
1154
1155     source.domainID = domainID1;
1156     source.name = "source1";
1157     source.sourceState = SS_ON;
1158     source.sourceID = 0;
1159     source.sourceClassID = 5;
1160     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
1161
1162     gwSource.domainID = domainID2;
1163     gwSource.name = "gwsource1";
1164     gwSource.sourceState = SS_ON;
1165     gwSource.sourceID = 0;
1166     gwSource.sourceClassID = 5;
1167     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1168
1169     gwSource1.domainID = domainID3;
1170     gwSource1.name = "gwsource2";
1171     gwSource1.sourceState = SS_ON;
1172     gwSource1.sourceID = 0;
1173     gwSource1.sourceClassID = 5;
1174     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
1175
1176     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
1177     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
1178     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
1179
1180     am_Sink_s sink, gwSink, gwSink1;
1181     am_sinkID_t sinkID, gwSinkID, gwSinkID1;
1182
1183     sink.domainID = domainID3;
1184     sink.name = "sink1";
1185     sink.sinkID = 0;
1186     sink.sinkClassID = 5;
1187     sink.muteState = MS_MUTED;
1188     sink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
1189
1190     gwSink.domainID = domainID1;
1191     gwSink.name = "gwSink";
1192     gwSink.sinkID = 0;
1193     gwSink.sinkClassID = 5;
1194     gwSink.muteState = MS_MUTED;
1195     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1196
1197     gwSink1.domainID = domainID2;
1198     gwSink1.name = "gwSink1";
1199     gwSink1.sinkID = 0;
1200     gwSink1.sinkClassID = 5;
1201     gwSink1.muteState = MS_MUTED;
1202     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1203
1204     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1205     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1206     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
1207
1208     am_Gateway_s gateway, gateway1;
1209     am_gatewayID_t gatewayID, gatewayID1;
1210
1211     gateway.controlDomainID = domainID1;
1212     gateway.gatewayID = 0;
1213     gateway.sinkID = gwSinkID;
1214     gateway.sourceID = gwSourceID;
1215     gateway.domainSourceID = domainID2;
1216     gateway.domainSinkID = domainID1;
1217     gateway.listSinkFormats = gwSink.listConnectionFormats;
1218     gateway.listSourceFormats = gwSource.listConnectionFormats;
1219     gateway.convertionMatrix.push_back(true);
1220     gateway.name = "gateway";
1221
1222     gateway1.controlDomainID = domainID2;
1223     gateway1.gatewayID = 0;
1224     gateway1.sinkID = gwSinkID1;
1225     gateway1.sourceID = gwSourceID1;
1226     gateway1.domainSourceID = domainID3;
1227     gateway1.domainSinkID = domainID2;
1228     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
1229     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
1230     gateway1.convertionMatrix.push_back(true);
1231     gateway1.name = "gateway";
1232
1233     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1234     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
1235
1236     std::vector<am_Route_s> listRoutes;
1237     std::vector<am_RoutingElement_s> listRoutingElements;
1238     am_RoutingElement_s hopp1;
1239     am_RoutingElement_s hopp2;
1240     am_RoutingElement_s hopp3;
1241
1242     hopp1.sourceID = sourceID;
1243     hopp1.sinkID = gwSinkID;
1244     hopp1.domainID = domainID1;
1245     hopp1.connectionFormat = source.listConnectionFormats[0];
1246
1247     hopp2.sourceID = gwSourceID;
1248     hopp2.sinkID = gwSinkID1;
1249     hopp2.domainID = domainID2;
1250     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
1251
1252     hopp3.sourceID = gwSourceID1;
1253     hopp3.sinkID = sinkID;
1254     hopp3.domainID = domainID3;
1255     hopp3.connectionFormat = sink.listConnectionFormats[0];
1256
1257     listRoutingElements.push_back(hopp1);
1258     listRoutingElements.push_back(hopp2);
1259     listRoutingElements.push_back(hopp3);
1260
1261     am_Route_s compareRoute;
1262     compareRoute.route = listRoutingElements;
1263     compareRoute.sinkID = sinkID;
1264     compareRoute.sourceID = sourceID;
1265
1266     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1267     ASSERT_EQ(0, listRoutes.size());
1268 }
1269 //test that checks just 2 domains, one sink one source with only one connection format each
1270 TEST_F(CAmRouterTest,simpleRoute2Domains)
1271 {
1272
1273
1274     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
1275
1276     //initialize 2 domains
1277     am_Domain_s domain1, domain2;
1278     am_domainID_t domainID1, domainID2;
1279
1280     domain1.domainID = 0;
1281     domain1.name = "domain1";
1282     domain1.busname = "domain1bus";
1283     domain1.state = DS_CONTROLLED;
1284     domain2.domainID = 0;
1285     domain2.name = "domain2";
1286     domain2.busname = "domain2bus";
1287     domain2.state = DS_CONTROLLED;
1288
1289     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
1290     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
1291
1292     am_Source_s source, gwSource;
1293     am_sourceID_t sourceID, gwSourceID;
1294
1295     source.domainID = domainID1;
1296     source.name = "source1";
1297     source.sourceState = SS_ON;
1298     source.sourceID = 0;
1299     source.sourceClassID = 5;
1300     source.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1301
1302     gwSource.domainID = domainID2;
1303     gwSource.name = "gwsource1";
1304     gwSource.sourceState = SS_ON;
1305     gwSource.sourceID = 0;
1306     gwSource.sourceClassID = 5;
1307     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
1308
1309     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
1310     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
1311
1312     am_Sink_s sink, gwSink;
1313     am_sinkID_t sinkID, gwSinkID;
1314
1315     sink.domainID = domainID2;
1316     sink.name = "sink1";
1317     sink.sinkID = 0;
1318     sink.sinkClassID = 5;
1319     sink.muteState = MS_MUTED;
1320     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1321
1322     gwSink.domainID = domainID1;
1323     gwSink.name = "gwSink";
1324     gwSink.sinkID = 0;
1325     gwSink.sinkClassID = 5;
1326     gwSink.muteState = MS_MUTED;
1327     gwSink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1328
1329     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1330     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1331
1332     am_Gateway_s gateway;
1333     am_gatewayID_t gatewayID;
1334
1335     gateway.controlDomainID = domainID1;
1336     gateway.gatewayID = 0;
1337     gateway.sinkID = gwSinkID;
1338     gateway.sourceID = gwSourceID;
1339     gateway.domainSourceID = domainID2;
1340     gateway.domainSinkID = domainID1;
1341     gateway.listSinkFormats = gwSink.listConnectionFormats;
1342     gateway.listSourceFormats = gwSource.listConnectionFormats;
1343     gateway.convertionMatrix.push_back(true);
1344     gateway.name = "gateway";
1345
1346     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1347
1348     std::vector<am_Route_s> listRoutes;
1349     std::vector<am_RoutingElement_s> listRoutingElements;
1350     am_RoutingElement_s hopp1;
1351     am_RoutingElement_s hopp2;
1352
1353     hopp1.sinkID = gwSinkID;
1354     hopp1.sourceID = sourceID;
1355     hopp1.domainID = domainID1;
1356     hopp1.connectionFormat = source.listConnectionFormats[0];
1357
1358     hopp2.sinkID = sinkID;
1359     hopp2.sourceID = gwSourceID;
1360     hopp2.domainID = domainID2;
1361     hopp2.connectionFormat = sink.listConnectionFormats[0];
1362
1363     listRoutingElements.push_back(hopp1);
1364     listRoutingElements.push_back(hopp2);
1365
1366     am_Route_s compareRoute;
1367     compareRoute.route = listRoutingElements;
1368     compareRoute.sinkID = sinkID;
1369     compareRoute.sourceID = sourceID;
1370
1371     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1372     ASSERT_EQ(1, listRoutes.size());
1373     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
1374
1375 }
1376
1377 //test that checks just 2 domains, one sink one source but the connectionformat of source
1378 TEST_F(CAmRouterTest,simpleRoute2DomainsNoMatchConnectionFormats)
1379 {
1380
1381
1382     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
1383
1384     //initialize 2 domains
1385     am_Domain_s domain1, domain2;
1386     am_domainID_t domainID1, domainID2;
1387
1388     domain1.domainID = 0;
1389     domain1.name = "domain1";
1390     domain1.busname = "domain1bus";
1391     domain1.state = DS_CONTROLLED;
1392     domain2.domainID = 0;
1393     domain2.name = "domain2";
1394     domain2.busname = "domain2bus";
1395     domain2.state = DS_CONTROLLED;
1396
1397     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
1398     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
1399
1400     am_Source_s source, gwSource;
1401     am_sourceID_t sourceID, gwSourceID;
1402
1403     source.domainID = domainID1;
1404     source.name = "source1";
1405     source.sourceState = SS_ON;
1406     source.sourceID = 0;
1407     source.sourceClassID = 5;
1408     source.listConnectionFormats.push_back(CF_GENIVI_STEREO);
1409
1410     gwSource.domainID = domainID2;
1411     gwSource.name = "gwsource1";
1412     gwSource.sourceState = SS_ON;
1413     gwSource.sourceID = 0;
1414     gwSource.sourceClassID = 5;
1415     gwSource.listConnectionFormats.push_back(CF_GENIVI_MONO);
1416
1417     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
1418     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
1419
1420     am_Sink_s sink, gwSink;
1421     am_sinkID_t sinkID, gwSinkID;
1422
1423     sink.domainID = domainID2;
1424     sink.name = "sink1";
1425     sink.sinkID = 0;
1426     sink.sinkClassID = 5;
1427     sink.muteState = MS_MUTED;
1428     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1429
1430     gwSink.domainID = domainID1;
1431     gwSink.name = "gwSink";
1432     gwSink.sinkID = 0;
1433     gwSink.sinkClassID = 5;
1434     gwSink.muteState = MS_MUTED;
1435     gwSink.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1436
1437     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1438     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1439
1440     am_Gateway_s gateway;
1441     am_gatewayID_t gatewayID;
1442
1443     gateway.controlDomainID = domainID1;
1444     gateway.gatewayID = 0;
1445     gateway.sinkID = gwSinkID;
1446     gateway.sourceID = gwSourceID;
1447     gateway.domainSourceID = domainID2;
1448     gateway.domainSinkID = domainID1;
1449     gateway.listSinkFormats = gwSink.listConnectionFormats;
1450     gateway.listSourceFormats = gwSource.listConnectionFormats;
1451     gateway.convertionMatrix.push_back(true);
1452     gateway.name = "gateway";
1453
1454     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1455
1456     std::vector<am_Route_s> listRoutes;
1457     std::vector<am_RoutingElement_s> listRoutingElements;
1458     am_RoutingElement_s hopp1;
1459     am_RoutingElement_s hopp2;
1460
1461     hopp1.sinkID = gwSinkID;
1462     hopp1.sourceID = sourceID;
1463     hopp1.domainID = domainID1;
1464     hopp1.connectionFormat = source.listConnectionFormats[0];
1465
1466     hopp2.sinkID = sinkID;
1467     hopp2.sourceID = gwSourceID;
1468     hopp2.domainID = domainID2;
1469     hopp2.connectionFormat = sink.listConnectionFormats[0];
1470
1471     listRoutingElements.push_back(hopp1);
1472     listRoutingElements.push_back(hopp2);
1473
1474     am_Route_s compareRoute;
1475     compareRoute.route = listRoutingElements;
1476     compareRoute.sinkID = sinkID;
1477     compareRoute.sourceID = sourceID;
1478
1479     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1480     ASSERT_EQ(0, listRoutes.size());
1481 }
1482
1483 //test that checks 3 domains, one sink one source.
1484 TEST_F(CAmRouterTest,simpleRoute3Domains)
1485 {
1486     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
1487
1488     //initialize 2 domains
1489     am_Domain_s domain1, domain2, domain3;
1490     am_domainID_t domainID1, domainID2, domainID3;
1491
1492     domain1.domainID = 0;
1493     domain1.name = "domain1";
1494     domain1.busname = "domain1bus";
1495     domain1.state = DS_CONTROLLED;
1496     domain2.domainID = 0;
1497     domain2.name = "domain2";
1498     domain2.busname = "domain2bus";
1499     domain2.state = DS_CONTROLLED;
1500     domain3.domainID = 0;
1501     domain3.name = "domain3";
1502     domain3.busname = "domain3bus";
1503     domain3.state = DS_CONTROLLED;
1504
1505     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
1506     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
1507     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
1508
1509     am_Source_s source, gwSource, gwSource1;
1510     am_sourceID_t sourceID, gwSourceID, gwSourceID1;
1511
1512     source.domainID = domainID1;
1513     source.name = "source1";
1514     source.sourceState = SS_ON;
1515     source.sourceID = 0;
1516     source.sourceClassID = 5;
1517     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
1518
1519     gwSource.domainID = domainID2;
1520     gwSource.name = "gwsource1";
1521     gwSource.sourceState = SS_ON;
1522     gwSource.sourceID = 0;
1523     gwSource.sourceClassID = 5;
1524     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1525
1526     gwSource1.domainID = domainID3;
1527     gwSource1.name = "gwsource2";
1528     gwSource1.sourceState = SS_ON;
1529     gwSource1.sourceID = 0;
1530     gwSource1.sourceClassID = 5;
1531     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
1532
1533     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
1534     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
1535     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
1536
1537     am_Sink_s sink, gwSink, gwSink1;
1538     am_sinkID_t sinkID, gwSinkID, gwSinkID1;
1539
1540     sink.domainID = domainID3;
1541     sink.name = "sink1";
1542     sink.sinkID = 0;
1543     sink.sinkClassID = 5;
1544     sink.muteState = MS_MUTED;
1545     sink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1546
1547     gwSink.domainID = domainID1;
1548     gwSink.name = "gwSink";
1549     gwSink.sinkID = 0;
1550     gwSink.sinkClassID = 5;
1551     gwSink.muteState = MS_MUTED;
1552     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1553
1554     gwSink1.domainID = domainID2;
1555     gwSink1.name = "gwSink1";
1556     gwSink1.sinkID = 0;
1557     gwSink1.sinkClassID = 5;
1558     gwSink1.muteState = MS_MUTED;
1559     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1560
1561     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1562     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1563     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
1564
1565     am_Gateway_s gateway, gateway1;
1566     am_gatewayID_t gatewayID, gatewayID1;
1567
1568     gateway.controlDomainID = domainID1;
1569     gateway.gatewayID = 0;
1570     gateway.sinkID = gwSinkID;
1571     gateway.sourceID = gwSourceID;
1572     gateway.domainSourceID = domainID2;
1573     gateway.domainSinkID = domainID1;
1574     gateway.listSinkFormats = gwSink.listConnectionFormats;
1575     gateway.listSourceFormats = gwSource.listConnectionFormats;
1576     gateway.convertionMatrix.push_back(true);
1577     gateway.name = "gateway";
1578
1579     gateway1.controlDomainID = domainID2;
1580     gateway1.gatewayID = 0;
1581     gateway1.sinkID = gwSinkID1;
1582     gateway1.sourceID = gwSourceID1;
1583     gateway1.domainSourceID = domainID3;
1584     gateway1.domainSinkID = domainID2;
1585     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
1586     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
1587     gateway1.convertionMatrix.push_back(true);
1588     gateway1.name = "gateway";
1589
1590     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1591     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
1592
1593     std::vector<am_Route_s> listRoutes;
1594     std::vector<am_RoutingElement_s> listRoutingElements;
1595     am_RoutingElement_s hopp1;
1596     am_RoutingElement_s hopp2;
1597     am_RoutingElement_s hopp3;
1598
1599     hopp1.sourceID = sourceID;
1600     hopp1.sinkID = gwSinkID;
1601     hopp1.domainID = domainID1;
1602     hopp1.connectionFormat = source.listConnectionFormats[0];
1603
1604     hopp2.sourceID = gwSourceID;
1605     hopp2.sinkID = gwSinkID1;
1606     hopp2.domainID = domainID2;
1607     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
1608
1609     hopp3.sourceID = gwSourceID1;
1610     hopp3.sinkID = sinkID;
1611     hopp3.domainID = domainID3;
1612     hopp3.connectionFormat = sink.listConnectionFormats[0];
1613
1614     listRoutingElements.push_back(hopp1);
1615     listRoutingElements.push_back(hopp2);
1616     listRoutingElements.push_back(hopp3);
1617
1618     am_Route_s compareRoute;
1619     compareRoute.route = listRoutingElements;
1620     compareRoute.sinkID = sinkID;
1621     compareRoute.sourceID = sourceID;
1622
1623     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1624     ASSERT_EQ(1, listRoutes.size());
1625     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
1626 }
1627
1628 //test that checks 4 domains, one sink and one source.
1629 TEST_F(CAmRouterTest,simpleRoute4Domains)
1630 {
1631     EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
1632
1633     //initialize 2 domains
1634     am_Domain_s domain1, domain2, domain3, domain4;
1635     am_domainID_t domainID1, domainID2, domainID3, domainID4;
1636
1637     domain1.domainID = 0;
1638     domain1.name = "domain1";
1639     domain1.busname = "domain1bus";
1640     domain1.state = DS_CONTROLLED;
1641     domain2.domainID = 0;
1642     domain2.name = "domain2";
1643     domain2.busname = "domain2bus";
1644     domain2.state = DS_CONTROLLED;
1645     domain3.domainID = 0;
1646     domain3.name = "domain3";
1647     domain3.busname = "domain3bus";
1648     domain3.state = DS_CONTROLLED;
1649     domain4.domainID = 0;
1650     domain4.name = "domain4";
1651     domain4.busname = "domain4bus";
1652     domain4.state = DS_CONTROLLED;
1653
1654     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
1655     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domainID2));
1656     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain3,domainID3));
1657     ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain4,domainID4));
1658
1659     am_Source_s source, gwSource, gwSource1, gwSource2;
1660     am_sourceID_t sourceID, gwSourceID, gwSourceID1, gwSourceID2;
1661
1662     source.domainID = domainID1;
1663     source.name = "source1";
1664     source.sourceState = SS_ON;
1665     source.sourceID = 0;
1666     source.sourceClassID = 5;
1667     source.listConnectionFormats.push_back(CF_GENIVI_MONO);
1668
1669     gwSource.domainID = domainID2;
1670     gwSource.name = "gwsource1";
1671     gwSource.sourceState = SS_ON;
1672     gwSource.sourceID = 0;
1673     gwSource.sourceClassID = 5;
1674     gwSource.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1675
1676     gwSource1.domainID = domainID3;
1677     gwSource1.name = "gwsource2";
1678     gwSource1.sourceState = SS_ON;
1679     gwSource1.sourceID = 0;
1680     gwSource1.sourceClassID = 5;
1681     gwSource1.listConnectionFormats.push_back(CF_GENIVI_MONO);
1682
1683     gwSource2.domainID = domainID4;
1684     gwSource2.name = "gwsource3";
1685     gwSource2.sourceState = SS_OFF;
1686     gwSource2.sourceID = 0;
1687     gwSource2.sourceClassID = 5;
1688     gwSource2.listConnectionFormats.push_back(CF_GENIVI_STEREO);
1689
1690     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
1691     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource,gwSourceID));
1692     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource1,gwSourceID1));
1693     ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(gwSource2,gwSourceID2));
1694
1695     am_Sink_s sink, gwSink, gwSink1, gwSink2;
1696     am_sinkID_t sinkID, gwSinkID, gwSinkID1, gwSinkID2;
1697
1698     gwSink.domainID = domainID1;
1699     gwSink.name = "gwSink";
1700     gwSink.sinkID = 0;
1701     gwSink.sinkClassID = 5;
1702     gwSink.muteState = MS_MUTED;
1703     gwSink.listConnectionFormats.push_back(CF_GENIVI_MONO);
1704
1705     gwSink1.domainID = domainID2;
1706     gwSink1.name = "gwSink1";
1707     gwSink1.sinkID = 0;
1708     gwSink1.sinkClassID = 5;
1709     gwSink1.muteState = MS_MUTED;
1710     gwSink1.listConnectionFormats.push_back(CF_GENIVI_ANALOG);
1711
1712     gwSink2.domainID = domainID3;
1713     gwSink2.name = "gwSink2";
1714     gwSink2.sinkID = 0;
1715     gwSink2.sinkClassID = 5;
1716     gwSink2.muteState = MS_MUTED;
1717     gwSink2.listConnectionFormats.push_back(CF_GENIVI_MONO);
1718
1719     sink.domainID = domainID4;
1720     sink.name = "sink1";
1721     sink.sinkID = 0;
1722     sink.sinkClassID = 5;
1723     sink.muteState = MS_MUTED;
1724     sink.listConnectionFormats.push_back(CF_GENIVI_STEREO);
1725
1726     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
1727     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink,gwSinkID));
1728     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink1,gwSinkID1));
1729     ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(gwSink2,gwSinkID2));
1730
1731     am_Gateway_s gateway, gateway1, gateway2;
1732     am_gatewayID_t gatewayID, gatewayID1, gatewayID2;
1733
1734     gateway.controlDomainID = domainID1;
1735     gateway.gatewayID = 0;
1736     gateway.sinkID = gwSinkID;
1737     gateway.sourceID = gwSourceID;
1738     gateway.domainSourceID = domainID2;
1739     gateway.domainSinkID = domainID1;
1740     gateway.listSinkFormats = gwSink.listConnectionFormats;
1741     gateway.listSourceFormats = gwSource.listConnectionFormats;
1742     gateway.convertionMatrix.push_back(true);
1743     gateway.name = "gateway";
1744
1745     gateway1.controlDomainID = domainID2;
1746     gateway1.gatewayID = 0;
1747     gateway1.sinkID = gwSinkID1;
1748     gateway1.sourceID = gwSourceID1;
1749     gateway1.domainSourceID = domainID3;
1750     gateway1.domainSinkID = domainID2;
1751     gateway1.listSinkFormats = gwSink1.listConnectionFormats;
1752     gateway1.listSourceFormats = gwSource1.listConnectionFormats;
1753     gateway1.convertionMatrix.push_back(true);
1754     gateway1.name = "gateway1";
1755
1756     gateway2.controlDomainID = domainID3;
1757     gateway2.gatewayID = 0;
1758     gateway2.sinkID = gwSinkID2;
1759     gateway2.sourceID = gwSourceID2;
1760     gateway2.domainSourceID = domainID4;
1761     gateway2.domainSinkID = domainID3;
1762     gateway2.listSinkFormats = gwSink2.listConnectionFormats;
1763     gateway2.listSourceFormats = gwSource2.listConnectionFormats;
1764     gateway2.convertionMatrix.push_back(true);
1765     gateway2.name = "gateway2";
1766
1767     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway,gatewayID));
1768     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway1,gatewayID1));
1769     ASSERT_EQ(E_OK, pDatabaseHandler.enterGatewayDB(gateway2,gatewayID2));
1770
1771     std::vector<am_Route_s> listRoutes;
1772     std::vector<am_RoutingElement_s> listRoutingElements;
1773     am_RoutingElement_s hopp1;
1774     am_RoutingElement_s hopp2;
1775     am_RoutingElement_s hopp3;
1776     am_RoutingElement_s hopp4;
1777
1778     hopp1.sourceID = sourceID;
1779     hopp1.sinkID = gwSinkID;
1780     hopp1.domainID = domainID1;
1781     hopp1.connectionFormat = source.listConnectionFormats[0];
1782
1783     hopp2.sourceID = gwSourceID;
1784     hopp2.sinkID = gwSinkID1;
1785     hopp2.domainID = domainID2;
1786     hopp2.connectionFormat = gwSink1.listConnectionFormats[0];
1787
1788     hopp3.sourceID = gwSourceID1;
1789     hopp3.sinkID = gwSinkID2;
1790     hopp3.domainID = domainID3;
1791     hopp3.connectionFormat = gwSink2.listConnectionFormats[0];
1792
1793     hopp4.sourceID = gwSourceID2;
1794     hopp4.sinkID = sinkID;
1795     hopp4.domainID = domainID4;
1796     hopp4.connectionFormat = sink.listConnectionFormats[0];
1797
1798     listRoutingElements.push_back(hopp1);
1799     listRoutingElements.push_back(hopp2);
1800     listRoutingElements.push_back(hopp3);
1801     listRoutingElements.push_back(hopp4);
1802
1803     am_Route_s compareRoute;
1804     compareRoute.route = listRoutingElements;
1805     compareRoute.sinkID = sinkID;
1806     compareRoute.sourceID = sourceID;
1807
1808     ASSERT_EQ(E_OK, pRouter.getRoute(false,sourceID,sinkID,listRoutes));
1809     ASSERT_EQ(1, listRoutes.size());
1810     ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
1811 }
1812
1813 int main(int argc, char **argv)
1814 {
1815     CAmDltWrapper::instance()->registerApp("routing", "CAmRouterTest");
1816     logInfo("Routing Test started ");
1817     ::testing::InitGoogleTest(&argc, argv);
1818     return RUN_ALL_TESTS();
1819 }
1820