diff options
Diffstat (limited to 'src/ipcpd/normal/pol/tests')
| -rw-r--r-- | src/ipcpd/normal/pol/tests/graph_test.c | 153 | 
1 files changed, 106 insertions, 47 deletions
diff --git a/src/ipcpd/normal/pol/tests/graph_test.c b/src/ipcpd/normal/pol/tests/graph_test.c index 87574187..42cf3f06 100644 --- a/src/ipcpd/normal/pol/tests/graph_test.c +++ b/src/ipcpd/normal/pol/tests/graph_test.c @@ -30,80 +30,105 @@  #include "graph.c" -struct graph *          graph; -struct routing_table ** table; -ssize_t                 n_table; -qosspec_t               qs; +struct graph *   graph; +struct list_head table; +qosspec_t        qs;  int graph_test_entries(int entries)  { -        n_table = graph_routing_table(graph, 1, &table); +        struct list_head * p; +        int                i = 0; -        if (n_table != entries) { +        if (graph_routing_table(graph, 1, &table)) { +                printf("Failed to get routing table.\n"); +                return -1; +        } + +        list_for_each(p, &table) +                i++; + +        if (i != entries) {                  printf("Wrong number of entries.\n"); -                freepp(struct routing_table, table, n_table); +                graph_free_routing_table(graph, &table);                  return -1;          } -        freepp(struct routing_table, table, n_table); +        graph_free_routing_table(graph, &table);          return 0;  }  int graph_test_double_link(void)  { -        n_table = graph_routing_table(graph, 1, &table); -        if (n_table < 0 || table == NULL) { +        struct list_head * p; +        int                i = 0; + +        if (graph_routing_table(graph, 1, &table)) {                  printf("Failed to get routing table.\n");                  return -1;          } -        if (n_table != 2) { +        list_for_each(p, &table) +                i++; + +        if (i != 2) {                  printf("Wrong number of entries.\n"); -                freepp(struct routing_table, table, n_table); +                graph_free_routing_table(graph, &table);                  return -1;          } -        if ((table[0]->dst != 2 && table[0]->nhop != 2) || -            (table[0]->dst != 3 && table[0]->nhop != 2)) { -                printf("Wrong routing entry.\n"); -                freepp(struct routing_table, table, n_table); -                return -1; -        } +        list_for_each(p, &table) { +                struct routing_table * t = +                        list_entry(p, struct routing_table, next); +                struct nhop *          n = +                        list_first_entry(&t->nhops, struct nhop, next); -        if ((table[1]->dst != 2 && table[1]->nhop != 2) || -            (table[0]->dst != 3 && table[0]->nhop != 2)) { -                printf("Wrong routing entry.\n"); -                freepp(struct routing_table, table, n_table); -                return -1; +                if ((t->dst != 2 && n->nhop != 2) || +                    (t->dst != 3 && n->nhop != 2)) { +                        printf("Wrong routing entry.\n"); +                        graph_free_routing_table(graph, &table); +                        return -1; +                }          } -        freepp(struct routing_table, table, n_table); +        graph_free_routing_table(graph, &table);          return 0;  }  int graph_test_single_link(void)  { -        n_table = graph_routing_table(graph, 1, &table); -        if (n_table < 0 || table == NULL) { +        struct list_head * p; +        int                i = 0; + +        if (graph_routing_table(graph, 1, &table)) {                  printf("Failed to get routing table.\n");                  return -1;          } -        if (n_table != 1) { +        list_for_each(p, &table) +                i++; + +        if (i != 1) {                  printf("Wrong number of entries.\n"); -                freepp(struct routing_table, table, n_table); +                graph_free_routing_table(graph, &table);                  return -1;          } -        if (table[0]->dst != 2 && table[0]->nhop != 2) { -                printf("Wrong routing entry.\n"); -                freepp(struct routing_table, table, n_table); -                return -1; +        list_for_each(p, &table) { +                struct routing_table * t = +                        list_entry(p, struct routing_table, next); +                struct nhop *          n = +                        list_first_entry(&t->nhops, struct nhop, next); + +                if (t->dst != 2 && n->nhop != 2) { +                        printf("Wrong routing entry.\n"); +                        graph_free_routing_table(graph, &table); +                        return -1; +                }          } -        freepp(struct routing_table, table, n_table); +        graph_free_routing_table(graph, &table);          return 0;  } @@ -111,9 +136,9 @@ int graph_test_single_link(void)  int graph_test(int     argc,                 char ** argv)  { -        int i; -        int nhop; -        int dst; +        int                nhop; +        int                dst; +        struct list_head * p;          (void) argc;          (void) argv; @@ -140,6 +165,12 @@ int graph_test(int     argc,                  return -1;          } +        if (graph_update_edge(graph, 2, 1, qs)) { +                printf("Failed to add edge.\n"); +                graph_destroy(graph); +                return -1; +        } +          if (graph_test_single_link()) {                  graph_destroy(graph);                  return -1; @@ -151,6 +182,13 @@ int graph_test(int     argc,                  return -1;          } +        if (graph_update_edge(graph, 3, 2, qs)) { +                printf("Failed to add edge.\n"); +                graph_destroy(graph); +                return -1; +        } + +          if (graph_test_double_link()) {                  graph_destroy(graph);                  return -1; @@ -162,13 +200,21 @@ int graph_test(int     argc,                  return -1;          } +        if (graph_del_edge(graph, 3, 2)) { +                printf("Failed to delete edge.\n"); +                graph_destroy(graph); +                return -1; +        } +          if (graph_test_single_link()) {                  graph_destroy(graph);                  return -1;          }          graph_update_edge(graph, 2, 3, qs); +        graph_update_edge(graph, 3, 2, qs);          graph_update_edge(graph, 1, 3, qs); +        graph_update_edge(graph, 3, 1, qs);          if (graph_test_entries(2)) {                  graph_destroy(graph); @@ -176,7 +222,9 @@ int graph_test(int     argc,          }          graph_update_edge(graph, 3, 4, qs); +        graph_update_edge(graph, 4, 3, qs);          graph_update_edge(graph, 4, 5, qs); +        graph_update_edge(graph, 5, 4, qs);          if (graph_test_entries(4)) {                  graph_destroy(graph); @@ -184,58 +232,69 @@ int graph_test(int     argc,          }          graph_update_edge(graph, 2, 6, qs); +        graph_update_edge(graph, 6, 2, qs);          graph_update_edge(graph, 6, 7, qs); +        graph_update_edge(graph, 7, 6, qs);          graph_update_edge(graph, 3, 7, qs); +        graph_update_edge(graph, 7, 3, qs);          if (graph_test_entries(6)) {                  graph_destroy(graph);                  return -1;          } -        n_table = graph_routing_table(graph, 1, &table); +        if (graph_routing_table(graph, 1, &table)) { +                printf("Failed to get routing table.\n"); +                return -1; +        } + +        list_for_each(p, &table) { +                struct routing_table * t = +                        list_entry(p, struct routing_table, next); +                struct nhop *          n = +                        list_first_entry(&t->nhops, struct nhop, next); -        for (i = 0; i < 6; i++) { -                nhop = table[i]->nhop; -                dst = table[i]->dst; +                dst = t->dst; +                nhop = n->nhop;                  if (dst == 3 && nhop != 3) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }                  if (dst == 2 && nhop != 2) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }                  if (dst == 6 && nhop != 2) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }                  if (dst == 4 && nhop != 3) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }                  if (dst == 5 && nhop != 3) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }                  if (dst == 7 && nhop != 3) {                          printf("Wrong entry."); -                        freepp(struct routing_table, table, n_table); +                        graph_free_routing_table(graph, &table);                          return -1;                  }          } -        freepp(struct routing_table, table, n_table); +        graph_free_routing_table(graph, &table);          return 0;  }  | 
