1*da668aa1SThomas Huth /* 2*da668aa1SThomas Huth * libqos driver framework 3*da668aa1SThomas Huth * 4*da668aa1SThomas Huth * Copyright (c) 2018 Emanuele Giuseppe Esposito <e.emanuelegiuseppe@gmail.com> 5*da668aa1SThomas Huth * 6*da668aa1SThomas Huth * This library is free software; you can redistribute it and/or 7*da668aa1SThomas Huth * modify it under the terms of the GNU Lesser General Public 8*da668aa1SThomas Huth * License version 2.1 as published by the Free Software Foundation. 9*da668aa1SThomas Huth * 10*da668aa1SThomas Huth * This library is distributed in the hope that it will be useful, 11*da668aa1SThomas Huth * but WITHOUT ANY WARRANTY; without even the implied warranty of 12*da668aa1SThomas Huth * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13*da668aa1SThomas Huth * Lesser General Public License for more details. 14*da668aa1SThomas Huth * 15*da668aa1SThomas Huth * You should have received a copy of the GNU Lesser General Public 16*da668aa1SThomas Huth * License along with this library; if not, see <http://www.gnu.org/licenses/> 17*da668aa1SThomas Huth */ 18*da668aa1SThomas Huth 19*da668aa1SThomas Huth #include "qemu/osdep.h" 20*da668aa1SThomas Huth #include "../qtest/libqos/qgraph.h" 21*da668aa1SThomas Huth #include "../qtest/libqos/qgraph_internal.h" 22*da668aa1SThomas Huth 23*da668aa1SThomas Huth #define MACHINE_PC "x86_64/pc" 24*da668aa1SThomas Huth #define MACHINE_RASPI2 "arm/raspi2" 25*da668aa1SThomas Huth #define I440FX "i440FX-pcihost" 26*da668aa1SThomas Huth #define PCIBUS_PC "pcibus-pc" 27*da668aa1SThomas Huth #define SDHCI "sdhci" 28*da668aa1SThomas Huth #define PCIBUS "pci-bus" 29*da668aa1SThomas Huth #define SDHCI_PCI "sdhci-pci" 30*da668aa1SThomas Huth #define SDHCI_MM "generic-sdhci" 31*da668aa1SThomas Huth #define REGISTER_TEST "register-test" 32*da668aa1SThomas Huth 33*da668aa1SThomas Huth int npath; 34*da668aa1SThomas Huth 35*da668aa1SThomas Huth static void *machinefunct(QTestState *qts) 36*da668aa1SThomas Huth { 37*da668aa1SThomas Huth return NULL; 38*da668aa1SThomas Huth } 39*da668aa1SThomas Huth 40*da668aa1SThomas Huth static void *driverfunct(void *obj, QGuestAllocator *machine, void *arg) 41*da668aa1SThomas Huth { 42*da668aa1SThomas Huth return NULL; 43*da668aa1SThomas Huth } 44*da668aa1SThomas Huth 45*da668aa1SThomas Huth static void testfunct(void *obj, void *arg, QGuestAllocator *alloc) 46*da668aa1SThomas Huth { 47*da668aa1SThomas Huth return; 48*da668aa1SThomas Huth } 49*da668aa1SThomas Huth 50*da668aa1SThomas Huth static void check_interface(const char *interface) 51*da668aa1SThomas Huth { 52*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_machine(interface), ==, FALSE); 53*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(interface)); 54*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_node(interface), ==, TRUE); 55*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_type(interface), ==, QNODE_INTERFACE); 56*da668aa1SThomas Huth qos_graph_node_set_availability(interface, TRUE); 57*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(interface), ==, TRUE); 58*da668aa1SThomas Huth } 59*da668aa1SThomas Huth 60*da668aa1SThomas Huth static void check_machine(const char *machine) 61*da668aa1SThomas Huth { 62*da668aa1SThomas Huth qos_node_create_machine(machine, machinefunct); 63*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_machine(machine)); 64*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_machine(machine), ==, TRUE); 65*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(machine)); 66*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(machine), ==, FALSE); 67*da668aa1SThomas Huth qos_graph_node_set_availability(machine, TRUE); 68*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(machine), ==, TRUE); 69*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_node(machine), ==, TRUE); 70*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_type(machine), ==, QNODE_MACHINE); 71*da668aa1SThomas Huth } 72*da668aa1SThomas Huth 73*da668aa1SThomas Huth static void check_contains(const char *machine, const char *driver) 74*da668aa1SThomas Huth { 75*da668aa1SThomas Huth QOSGraphEdge *edge; 76*da668aa1SThomas Huth qos_node_contains(machine, driver, NULL); 77*da668aa1SThomas Huth 78*da668aa1SThomas Huth edge = qos_graph_get_edge(machine, driver); 79*da668aa1SThomas Huth g_assert_nonnull(edge); 80*da668aa1SThomas Huth g_assert_cmpint(qos_graph_edge_get_type(edge), ==, QEDGE_CONTAINS); 81*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_edge(machine, driver), ==, TRUE); 82*da668aa1SThomas Huth } 83*da668aa1SThomas Huth 84*da668aa1SThomas Huth static void check_produces(const char *machine, const char *interface) 85*da668aa1SThomas Huth { 86*da668aa1SThomas Huth QOSGraphEdge *edge; 87*da668aa1SThomas Huth 88*da668aa1SThomas Huth qos_node_produces(machine, interface); 89*da668aa1SThomas Huth check_interface(interface); 90*da668aa1SThomas Huth edge = qos_graph_get_edge(machine, interface); 91*da668aa1SThomas Huth g_assert_nonnull(edge); 92*da668aa1SThomas Huth g_assert_cmpint(qos_graph_edge_get_type(edge), ==, 93*da668aa1SThomas Huth QEDGE_PRODUCES); 94*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_edge(machine, interface), ==, TRUE); 95*da668aa1SThomas Huth } 96*da668aa1SThomas Huth 97*da668aa1SThomas Huth static void check_consumes(const char *driver, const char *interface) 98*da668aa1SThomas Huth { 99*da668aa1SThomas Huth QOSGraphEdge *edge; 100*da668aa1SThomas Huth 101*da668aa1SThomas Huth qos_node_consumes(driver, interface, NULL); 102*da668aa1SThomas Huth check_interface(interface); 103*da668aa1SThomas Huth edge = qos_graph_get_edge(interface, driver); 104*da668aa1SThomas Huth g_assert_nonnull(edge); 105*da668aa1SThomas Huth g_assert_cmpint(qos_graph_edge_get_type(edge), ==, QEDGE_CONSUMED_BY); 106*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_edge(interface, driver), ==, TRUE); 107*da668aa1SThomas Huth } 108*da668aa1SThomas Huth 109*da668aa1SThomas Huth static void check_driver(const char *driver) 110*da668aa1SThomas Huth { 111*da668aa1SThomas Huth qos_node_create_driver(driver, driverfunct); 112*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_machine(driver), ==, FALSE); 113*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(driver)); 114*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_node(driver), ==, TRUE); 115*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_type(driver), ==, QNODE_DRIVER); 116*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(driver), ==, FALSE); 117*da668aa1SThomas Huth qos_graph_node_set_availability(driver, TRUE); 118*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(driver), ==, TRUE); 119*da668aa1SThomas Huth } 120*da668aa1SThomas Huth 121*da668aa1SThomas Huth static void check_test(const char *test, const char *interface) 122*da668aa1SThomas Huth { 123*da668aa1SThomas Huth QOSGraphEdge *edge; 124*da668aa1SThomas Huth char *full_name = g_strdup_printf("%s-tests/%s", interface, test); 125*da668aa1SThomas Huth 126*da668aa1SThomas Huth qos_add_test(test, interface, testfunct, NULL); 127*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_machine(test), ==, FALSE); 128*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_machine(full_name), ==, FALSE); 129*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(full_name)); 130*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_node(full_name), ==, TRUE); 131*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_type(full_name), ==, QNODE_TEST); 132*da668aa1SThomas Huth edge = qos_graph_get_edge(interface, full_name); 133*da668aa1SThomas Huth g_assert_nonnull(edge); 134*da668aa1SThomas Huth g_assert_cmpint(qos_graph_edge_get_type(edge), ==, 135*da668aa1SThomas Huth QEDGE_CONSUMED_BY); 136*da668aa1SThomas Huth g_assert_cmpint(qos_graph_has_edge(interface, full_name), ==, TRUE); 137*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(full_name), ==, TRUE); 138*da668aa1SThomas Huth qos_graph_node_set_availability(full_name, FALSE); 139*da668aa1SThomas Huth g_assert_cmpint(qos_graph_get_node_availability(full_name), ==, FALSE); 140*da668aa1SThomas Huth g_free(full_name); 141*da668aa1SThomas Huth } 142*da668aa1SThomas Huth 143*da668aa1SThomas Huth static void count_each_test(QOSGraphNode *path, int len) 144*da668aa1SThomas Huth { 145*da668aa1SThomas Huth npath++; 146*da668aa1SThomas Huth } 147*da668aa1SThomas Huth 148*da668aa1SThomas Huth static void check_leaf_discovered(int n) 149*da668aa1SThomas Huth { 150*da668aa1SThomas Huth npath = 0; 151*da668aa1SThomas Huth qos_graph_foreach_test_path(count_each_test); 152*da668aa1SThomas Huth g_assert_cmpint(n, ==, npath); 153*da668aa1SThomas Huth } 154*da668aa1SThomas Huth 155*da668aa1SThomas Huth /* G_Test functions */ 156*da668aa1SThomas Huth 157*da668aa1SThomas Huth static void init_nop(void) 158*da668aa1SThomas Huth { 159*da668aa1SThomas Huth qos_graph_init(); 160*da668aa1SThomas Huth qos_graph_destroy(); 161*da668aa1SThomas Huth } 162*da668aa1SThomas Huth 163*da668aa1SThomas Huth static void test_machine(void) 164*da668aa1SThomas Huth { 165*da668aa1SThomas Huth qos_graph_init(); 166*da668aa1SThomas Huth check_machine(MACHINE_PC); 167*da668aa1SThomas Huth qos_graph_destroy(); 168*da668aa1SThomas Huth } 169*da668aa1SThomas Huth 170*da668aa1SThomas Huth static void test_contains(void) 171*da668aa1SThomas Huth { 172*da668aa1SThomas Huth qos_graph_init(); 173*da668aa1SThomas Huth check_contains(MACHINE_PC, I440FX); 174*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(MACHINE_PC)); 175*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(I440FX)); 176*da668aa1SThomas Huth g_assert_null(qos_graph_get_node(MACHINE_PC)); 177*da668aa1SThomas Huth g_assert_null(qos_graph_get_node(I440FX)); 178*da668aa1SThomas Huth qos_graph_destroy(); 179*da668aa1SThomas Huth } 180*da668aa1SThomas Huth 181*da668aa1SThomas Huth static void test_multiple_contains(void) 182*da668aa1SThomas Huth { 183*da668aa1SThomas Huth qos_graph_init(); 184*da668aa1SThomas Huth check_contains(MACHINE_PC, I440FX); 185*da668aa1SThomas Huth check_contains(MACHINE_PC, PCIBUS_PC); 186*da668aa1SThomas Huth qos_graph_destroy(); 187*da668aa1SThomas Huth } 188*da668aa1SThomas Huth 189*da668aa1SThomas Huth static void test_produces(void) 190*da668aa1SThomas Huth { 191*da668aa1SThomas Huth qos_graph_init(); 192*da668aa1SThomas Huth check_produces(MACHINE_PC, I440FX); 193*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(MACHINE_PC)); 194*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(I440FX)); 195*da668aa1SThomas Huth g_assert_null(qos_graph_get_node(MACHINE_PC)); 196*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(I440FX)); 197*da668aa1SThomas Huth qos_graph_destroy(); 198*da668aa1SThomas Huth } 199*da668aa1SThomas Huth 200*da668aa1SThomas Huth static void test_multiple_produces(void) 201*da668aa1SThomas Huth { 202*da668aa1SThomas Huth qos_graph_init(); 203*da668aa1SThomas Huth check_produces(MACHINE_PC, I440FX); 204*da668aa1SThomas Huth check_produces(MACHINE_PC, PCIBUS_PC); 205*da668aa1SThomas Huth qos_graph_destroy(); 206*da668aa1SThomas Huth } 207*da668aa1SThomas Huth 208*da668aa1SThomas Huth static void test_consumes(void) 209*da668aa1SThomas Huth { 210*da668aa1SThomas Huth qos_graph_init(); 211*da668aa1SThomas Huth check_consumes(I440FX, SDHCI); 212*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(I440FX)); 213*da668aa1SThomas Huth g_assert_null(qos_graph_get_machine(SDHCI)); 214*da668aa1SThomas Huth g_assert_null(qos_graph_get_node(I440FX)); 215*da668aa1SThomas Huth g_assert_nonnull(qos_graph_get_node(SDHCI)); 216*da668aa1SThomas Huth qos_graph_destroy(); 217*da668aa1SThomas Huth } 218*da668aa1SThomas Huth 219*da668aa1SThomas Huth static void test_multiple_consumes(void) 220*da668aa1SThomas Huth { 221*da668aa1SThomas Huth qos_graph_init(); 222*da668aa1SThomas Huth check_consumes(I440FX, SDHCI); 223*da668aa1SThomas Huth check_consumes(PCIBUS_PC, SDHCI); 224*da668aa1SThomas Huth qos_graph_destroy(); 225*da668aa1SThomas Huth } 226*da668aa1SThomas Huth 227*da668aa1SThomas Huth static void test_driver(void) 228*da668aa1SThomas Huth { 229*da668aa1SThomas Huth qos_graph_init(); 230*da668aa1SThomas Huth check_driver(I440FX); 231*da668aa1SThomas Huth qos_graph_destroy(); 232*da668aa1SThomas Huth } 233*da668aa1SThomas Huth 234*da668aa1SThomas Huth static void test_test(void) 235*da668aa1SThomas Huth { 236*da668aa1SThomas Huth qos_graph_init(); 237*da668aa1SThomas Huth check_test(REGISTER_TEST, SDHCI); 238*da668aa1SThomas Huth qos_graph_destroy(); 239*da668aa1SThomas Huth } 240*da668aa1SThomas Huth 241*da668aa1SThomas Huth static void test_machine_contains_driver(void) 242*da668aa1SThomas Huth { 243*da668aa1SThomas Huth qos_graph_init(); 244*da668aa1SThomas Huth check_machine(MACHINE_PC); 245*da668aa1SThomas Huth check_driver(I440FX); 246*da668aa1SThomas Huth check_contains(MACHINE_PC, I440FX); 247*da668aa1SThomas Huth qos_graph_destroy(); 248*da668aa1SThomas Huth } 249*da668aa1SThomas Huth 250*da668aa1SThomas Huth static void test_driver_contains_driver(void) 251*da668aa1SThomas Huth { 252*da668aa1SThomas Huth qos_graph_init(); 253*da668aa1SThomas Huth check_driver(PCIBUS_PC); 254*da668aa1SThomas Huth check_driver(I440FX); 255*da668aa1SThomas Huth check_contains(PCIBUS_PC, I440FX); 256*da668aa1SThomas Huth qos_graph_destroy(); 257*da668aa1SThomas Huth } 258*da668aa1SThomas Huth 259*da668aa1SThomas Huth static void test_machine_produces_interface(void) 260*da668aa1SThomas Huth { 261*da668aa1SThomas Huth qos_graph_init(); 262*da668aa1SThomas Huth check_machine(MACHINE_PC); 263*da668aa1SThomas Huth check_produces(MACHINE_PC, SDHCI); 264*da668aa1SThomas Huth qos_graph_destroy(); 265*da668aa1SThomas Huth } 266*da668aa1SThomas Huth 267*da668aa1SThomas Huth static void test_driver_produces_interface(void) 268*da668aa1SThomas Huth { 269*da668aa1SThomas Huth qos_graph_init(); 270*da668aa1SThomas Huth check_driver(I440FX); 271*da668aa1SThomas Huth check_produces(I440FX, SDHCI); 272*da668aa1SThomas Huth qos_graph_destroy(); 273*da668aa1SThomas Huth } 274*da668aa1SThomas Huth 275*da668aa1SThomas Huth static void test_machine_consumes_interface(void) 276*da668aa1SThomas Huth { 277*da668aa1SThomas Huth qos_graph_init(); 278*da668aa1SThomas Huth check_machine(MACHINE_PC); 279*da668aa1SThomas Huth check_consumes(MACHINE_PC, SDHCI); 280*da668aa1SThomas Huth qos_graph_destroy(); 281*da668aa1SThomas Huth } 282*da668aa1SThomas Huth 283*da668aa1SThomas Huth static void test_driver_consumes_interface(void) 284*da668aa1SThomas Huth { 285*da668aa1SThomas Huth qos_graph_init(); 286*da668aa1SThomas Huth check_driver(I440FX); 287*da668aa1SThomas Huth check_consumes(I440FX, SDHCI); 288*da668aa1SThomas Huth qos_graph_destroy(); 289*da668aa1SThomas Huth } 290*da668aa1SThomas Huth 291*da668aa1SThomas Huth static void test_test_consumes_interface(void) 292*da668aa1SThomas Huth { 293*da668aa1SThomas Huth qos_graph_init(); 294*da668aa1SThomas Huth check_test(REGISTER_TEST, SDHCI); 295*da668aa1SThomas Huth qos_graph_destroy(); 296*da668aa1SThomas Huth } 297*da668aa1SThomas Huth 298*da668aa1SThomas Huth static void test_full_sample(void) 299*da668aa1SThomas Huth { 300*da668aa1SThomas Huth qos_graph_init(); 301*da668aa1SThomas Huth check_machine(MACHINE_PC); 302*da668aa1SThomas Huth check_contains(MACHINE_PC, I440FX); 303*da668aa1SThomas Huth check_driver(I440FX); 304*da668aa1SThomas Huth check_driver(PCIBUS_PC); 305*da668aa1SThomas Huth check_contains(I440FX, PCIBUS_PC); 306*da668aa1SThomas Huth check_produces(PCIBUS_PC, PCIBUS); 307*da668aa1SThomas Huth check_driver(SDHCI_PCI); 308*da668aa1SThomas Huth qos_node_consumes(SDHCI_PCI, PCIBUS, NULL); 309*da668aa1SThomas Huth check_produces(SDHCI_PCI, SDHCI); 310*da668aa1SThomas Huth check_driver(SDHCI_MM); 311*da668aa1SThomas Huth check_produces(SDHCI_MM, SDHCI); 312*da668aa1SThomas Huth qos_add_test(REGISTER_TEST, SDHCI, testfunct, NULL); 313*da668aa1SThomas Huth check_leaf_discovered(1); 314*da668aa1SThomas Huth qos_print_graph(); 315*da668aa1SThomas Huth qos_graph_destroy(); 316*da668aa1SThomas Huth } 317*da668aa1SThomas Huth 318*da668aa1SThomas Huth static void test_full_sample_raspi(void) 319*da668aa1SThomas Huth { 320*da668aa1SThomas Huth qos_graph_init(); 321*da668aa1SThomas Huth check_machine(MACHINE_PC); 322*da668aa1SThomas Huth check_contains(MACHINE_PC, I440FX); 323*da668aa1SThomas Huth check_driver(I440FX); 324*da668aa1SThomas Huth check_driver(PCIBUS_PC); 325*da668aa1SThomas Huth check_contains(I440FX, PCIBUS_PC); 326*da668aa1SThomas Huth check_produces(PCIBUS_PC, PCIBUS); 327*da668aa1SThomas Huth check_driver(SDHCI_PCI); 328*da668aa1SThomas Huth qos_node_consumes(SDHCI_PCI, PCIBUS, NULL); 329*da668aa1SThomas Huth check_produces(SDHCI_PCI, SDHCI); 330*da668aa1SThomas Huth check_machine(MACHINE_RASPI2); 331*da668aa1SThomas Huth check_contains(MACHINE_RASPI2, SDHCI_MM); 332*da668aa1SThomas Huth check_driver(SDHCI_MM); 333*da668aa1SThomas Huth check_produces(SDHCI_MM, SDHCI); 334*da668aa1SThomas Huth qos_add_test(REGISTER_TEST, SDHCI, testfunct, NULL); 335*da668aa1SThomas Huth qos_print_graph(); 336*da668aa1SThomas Huth check_leaf_discovered(2); 337*da668aa1SThomas Huth qos_graph_destroy(); 338*da668aa1SThomas Huth } 339*da668aa1SThomas Huth 340*da668aa1SThomas Huth static void test_cycle(void) 341*da668aa1SThomas Huth { 342*da668aa1SThomas Huth qos_graph_init(); 343*da668aa1SThomas Huth check_machine(MACHINE_RASPI2); 344*da668aa1SThomas Huth check_driver("B"); 345*da668aa1SThomas Huth check_driver("C"); 346*da668aa1SThomas Huth check_driver("D"); 347*da668aa1SThomas Huth check_contains(MACHINE_RASPI2, "B"); 348*da668aa1SThomas Huth check_contains("B", "C"); 349*da668aa1SThomas Huth check_contains("C", "D"); 350*da668aa1SThomas Huth check_contains("D", MACHINE_RASPI2); 351*da668aa1SThomas Huth check_leaf_discovered(0); 352*da668aa1SThomas Huth qos_print_graph(); 353*da668aa1SThomas Huth qos_graph_destroy(); 354*da668aa1SThomas Huth } 355*da668aa1SThomas Huth 356*da668aa1SThomas Huth static void test_two_test_same_interface(void) 357*da668aa1SThomas Huth { 358*da668aa1SThomas Huth qos_graph_init(); 359*da668aa1SThomas Huth check_machine(MACHINE_RASPI2); 360*da668aa1SThomas Huth check_produces(MACHINE_RASPI2, "B"); 361*da668aa1SThomas Huth qos_add_test("C", "B", testfunct, NULL); 362*da668aa1SThomas Huth qos_add_test("D", "B", testfunct, NULL); 363*da668aa1SThomas Huth check_contains(MACHINE_RASPI2, "B"); 364*da668aa1SThomas Huth check_leaf_discovered(4); 365*da668aa1SThomas Huth qos_print_graph(); 366*da668aa1SThomas Huth qos_graph_destroy(); 367*da668aa1SThomas Huth } 368*da668aa1SThomas Huth 369*da668aa1SThomas Huth static void test_test_in_path(void) 370*da668aa1SThomas Huth { 371*da668aa1SThomas Huth qos_graph_init(); 372*da668aa1SThomas Huth check_machine(MACHINE_RASPI2); 373*da668aa1SThomas Huth check_produces(MACHINE_RASPI2, "B"); 374*da668aa1SThomas Huth qos_add_test("C", "B", testfunct, NULL); 375*da668aa1SThomas Huth check_driver("D"); 376*da668aa1SThomas Huth check_consumes("D", "B"); 377*da668aa1SThomas Huth check_produces("D", "E"); 378*da668aa1SThomas Huth qos_add_test("F", "E", testfunct, NULL); 379*da668aa1SThomas Huth check_leaf_discovered(2); 380*da668aa1SThomas Huth qos_print_graph(); 381*da668aa1SThomas Huth qos_graph_destroy(); 382*da668aa1SThomas Huth } 383*da668aa1SThomas Huth 384*da668aa1SThomas Huth static void test_double_edge(void) 385*da668aa1SThomas Huth { 386*da668aa1SThomas Huth qos_graph_init(); 387*da668aa1SThomas Huth check_machine(MACHINE_RASPI2); 388*da668aa1SThomas Huth check_produces("B", "C"); 389*da668aa1SThomas Huth qos_node_consumes("C", "B", NULL); 390*da668aa1SThomas Huth qos_add_test("D", "C", testfunct, NULL); 391*da668aa1SThomas Huth check_contains(MACHINE_RASPI2, "B"); 392*da668aa1SThomas Huth qos_print_graph(); 393*da668aa1SThomas Huth qos_graph_destroy(); 394*da668aa1SThomas Huth } 395*da668aa1SThomas Huth 396*da668aa1SThomas Huth int main(int argc, char **argv) 397*da668aa1SThomas Huth { 398*da668aa1SThomas Huth g_test_init(&argc, &argv, NULL); 399*da668aa1SThomas Huth g_test_add_func("/qgraph/init_nop", init_nop); 400*da668aa1SThomas Huth g_test_add_func("/qgraph/test_machine", test_machine); 401*da668aa1SThomas Huth g_test_add_func("/qgraph/test_contains", test_contains); 402*da668aa1SThomas Huth g_test_add_func("/qgraph/test_multiple_contains", test_multiple_contains); 403*da668aa1SThomas Huth g_test_add_func("/qgraph/test_produces", test_produces); 404*da668aa1SThomas Huth g_test_add_func("/qgraph/test_multiple_produces", test_multiple_produces); 405*da668aa1SThomas Huth g_test_add_func("/qgraph/test_consumes", test_consumes); 406*da668aa1SThomas Huth g_test_add_func("/qgraph/test_multiple_consumes", 407*da668aa1SThomas Huth test_multiple_consumes); 408*da668aa1SThomas Huth g_test_add_func("/qgraph/test_driver", test_driver); 409*da668aa1SThomas Huth g_test_add_func("/qgraph/test_test", test_test); 410*da668aa1SThomas Huth g_test_add_func("/qgraph/test_machine_contains_driver", 411*da668aa1SThomas Huth test_machine_contains_driver); 412*da668aa1SThomas Huth g_test_add_func("/qgraph/test_driver_contains_driver", 413*da668aa1SThomas Huth test_driver_contains_driver); 414*da668aa1SThomas Huth g_test_add_func("/qgraph/test_machine_produces_interface", 415*da668aa1SThomas Huth test_machine_produces_interface); 416*da668aa1SThomas Huth g_test_add_func("/qgraph/test_driver_produces_interface", 417*da668aa1SThomas Huth test_driver_produces_interface); 418*da668aa1SThomas Huth g_test_add_func("/qgraph/test_machine_consumes_interface", 419*da668aa1SThomas Huth test_machine_consumes_interface); 420*da668aa1SThomas Huth g_test_add_func("/qgraph/test_driver_consumes_interface", 421*da668aa1SThomas Huth test_driver_consumes_interface); 422*da668aa1SThomas Huth g_test_add_func("/qgraph/test_test_consumes_interface", 423*da668aa1SThomas Huth test_test_consumes_interface); 424*da668aa1SThomas Huth g_test_add_func("/qgraph/test_full_sample", test_full_sample); 425*da668aa1SThomas Huth g_test_add_func("/qgraph/test_full_sample_raspi", test_full_sample_raspi); 426*da668aa1SThomas Huth g_test_add_func("/qgraph/test_cycle", test_cycle); 427*da668aa1SThomas Huth g_test_add_func("/qgraph/test_two_test_same_interface", 428*da668aa1SThomas Huth test_two_test_same_interface); 429*da668aa1SThomas Huth g_test_add_func("/qgraph/test_test_in_path", test_test_in_path); 430*da668aa1SThomas Huth g_test_add_func("/qgraph/test_double_edge", test_double_edge); 431*da668aa1SThomas Huth 432*da668aa1SThomas Huth g_test_run(); 433*da668aa1SThomas Huth return 0; 434*da668aa1SThomas Huth } 435