diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-07-25 12:50:46 +0200 | 
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2019-07-29 19:36:45 +0200 | 
| commit | dae15c284248d49079ad5f8a3d8ff30e217f419e (patch) | |
| tree | ea7942e940396c0c78304fef8b43fb25c5aebba8 /src/ipcpd/unicast/pol/tests | |
| parent | c9232acef855b51d1bc199a68c03c0695ac11192 (diff) | |
| download | ouroboros-dae15c284248d49079ad5f8a3d8ff30e217f419e.tar.gz ouroboros-dae15c284248d49079ad5f8a3d8ff30e217f419e.zip | |
build: Refactor normal to unicast
This completes the renaming of the normal IPCP to the unicast IPCP in
the sources, to get everything consistent with the documentation.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/pol/tests')
| -rw-r--r-- | src/ipcpd/unicast/pol/tests/CMakeLists.txt | 34 | ||||
| -rw-r--r-- | src/ipcpd/unicast/pol/tests/graph_test.c | 300 | 
2 files changed, 334 insertions, 0 deletions
| diff --git a/src/ipcpd/unicast/pol/tests/CMakeLists.txt b/src/ipcpd/unicast/pol/tests/CMakeLists.txt new file mode 100644 index 00000000..d0652533 --- /dev/null +++ b/src/ipcpd/unicast/pol/tests/CMakeLists.txt @@ -0,0 +1,34 @@ +get_filename_component(CURRENT_SOURCE_PARENT_DIR +  ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) +get_filename_component(CURRENT_BINARY_PARENT_DIR +  ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +include_directories(${CURRENT_SOURCE_PARENT_DIR}) +include_directories(${CURRENT_BINARY_PARENT_DIR}) + +include_directories(${CMAKE_SOURCE_DIR}/include) +include_directories(${CMAKE_BINARY_DIR}/include) + +get_filename_component(PARENT_PATH ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) +get_filename_component(PARENT_DIR ${PARENT_PATH} NAME) + +create_test_sourcelist(${PARENT_DIR}_tests test_suite.c +  # Add new tests here +  graph_test.c +  ) + +add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests}) +target_link_libraries(${PARENT_DIR}_test ouroboros-common) + +add_dependencies(check ${PARENT_DIR}_test) + +set(tests_to_run ${${PARENT_DIR}_tests}) +remove(tests_to_run test_suite.c) + +foreach (test ${tests_to_run}) +  get_filename_component(test_name ${test} NAME_WE) +  add_test(${test_name} ${C_TEST_PATH}/${PARENT_DIR}_test ${test_name}) +endforeach (test) diff --git a/src/ipcpd/unicast/pol/tests/graph_test.c b/src/ipcpd/unicast/pol/tests/graph_test.c new file mode 100644 index 00000000..a312c1a8 --- /dev/null +++ b/src/ipcpd/unicast/pol/tests/graph_test.c @@ -0,0 +1,300 @@ +/* + * Ouroboros - Copyright (C) 2016 - 2019 + * + * Test of the graph structure + * + *    Dimitri Staessens <dimitri.staessens@ugent.be> + *    Sander Vrijders   <sander.vrijders@ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., http://www.fsf.org/about/contact/. + */ + +#define _POSIX_C_SOURCE 200112L + +#include <ouroboros/utils.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "graph.c" + +struct graph *   graph; +struct list_head table; +qosspec_t        qs; + +int graph_test_entries(int entries) +{ +        struct list_head * p; +        int                i = 0; + +        if (graph_routing_table(graph, ROUTING_SIMPLE, 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"); +                graph_free_routing_table(graph, &table); +                return -1; +        } + +        graph_free_routing_table(graph, &table); + +        return 0; +} + +int graph_test_double_link(void) +{ +        struct list_head * p; +        int                i = 0; + +        if (graph_routing_table(graph, ROUTING_SIMPLE, 1, &table)) { +                printf("Failed to get routing table.\n"); +                return -1; +        } + +        list_for_each(p, &table) +                i++; + +        if (i != 2) { +                printf("Wrong number of entries.\n"); +                graph_free_routing_table(graph, &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) || +                    (t->dst != 3 && n->nhop != 2)) { +                        printf("Wrong routing entry.\n"); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } +        } + +        graph_free_routing_table(graph, &table); + +        return 0; +} + +int graph_test_single_link(void) +{ +        struct list_head * p; +        int                i = 0; + +        if (graph_routing_table(graph, ROUTING_SIMPLE, 1, &table)) { +                printf("Failed to get routing table.\n"); +                return -1; +        } + +        list_for_each(p, &table) +                i++; + +        if (i != 1) { +                printf("Wrong number of entries.\n"); +                graph_free_routing_table(graph, &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; +                } +        } + +        graph_free_routing_table(graph, &table); + +        return 0; +} + +int graph_test(int     argc, +               char ** argv) +{ +        int                nhop; +        int                dst; +        struct list_head * p; + +        (void) argc; +        (void) argv; + +        memset(&qs, 0, sizeof(qs)); + +        graph = graph_create(); +        if (graph == NULL) { +                printf("Failed to create graph.\n"); +                return -1; +        } + +        graph_destroy(graph); + +        graph = graph_create(); +        if (graph == NULL) { +                printf("Failed to create graph.\n"); +                return -1; +        } + +        if (graph_update_edge(graph, 1, 2, qs)) { +                printf("Failed to add edge.\n"); +                graph_destroy(graph); +                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; +        } + +        if (graph_update_edge(graph, 2, 3, qs)) { +                printf("Failed to add edge.\n"); +                graph_destroy(graph); +                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; +        } + +        if (graph_del_edge(graph, 2, 3)) { +                printf("Failed to delete edge.\n"); +                graph_destroy(graph); +                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); +                return -1; +        } + +        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); +                return -1; +        } + +        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; +        } + +        if (graph_routing_table(graph, ROUTING_SIMPLE, 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); + +                dst = t->dst; +                nhop = n->nhop; + +                if (dst == 3 && nhop != 3) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } + +                if (dst == 2 && nhop != 2) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } + +                if (dst == 6 && nhop != 2) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } + +                if (dst == 4 && nhop != 3) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } + +                if (dst == 5 && nhop != 3) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } + +                if (dst == 7 && nhop != 3) { +                        printf("Wrong entry."); +                        graph_free_routing_table(graph, &table); +                        return -1; +                } +        } + +        graph_free_routing_table(graph, &table); + +        return 0; +} | 
