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