예제 #1
0
    def test_activate_desactivate_route(self):
        """
        Test the activation/desactivation of temporary route
        """

        # add test route
        self.add_default_route()

        # get the test route
        route_list = self.get_route_list()
        route = self.get_test_route(route_list)
        route_id = route['id']

        # check if the test route is active
        route_activation = route['is_activated']
        self.assertTrue(
            route_activation, "\n\n>>> Route should be activated\
                                           when created")

        # desactivate test route
        request_json.enable_disable_route(route_id, False)

        # get the route
        test = request_json.get_one_route(route_id)
        route = test.json()

        # check if the test route is not active
        route_activation = route['is_activated']
        self.assertFalse(
            route_activation, "\n\n>>> Route should be \
                                            desactivated when desactivated")

        # delete test route
        request_json.delete_route(route_id)
예제 #2
0
    def delete_default_route(self):
        """
        Intermediate testing function
        Clarify the process of deleting the test route
        """

        # get the list of routes
        json_data = self.get_route_list()

        # find the route to delete
        route = self.get_test_route(json_data)
        route_id = str(route['id'])
        request_json.delete_route(route_id)
예제 #3
0
    def delete_random(self):
        """
        Route deletion ( almost all )
        Efficient in parrallel, unreliable alone
        May ask to delete routes that have already been deleted
        """

        response = requests_get(settings.API_URL)
        json_data = response.json()
        json_size = len(json_data)

        print(json_size, "routes to destroy\n")

        # find the routes to delete
        for _ in range(int(json_size)):
            route = random_choice(json_data)
            if self.is_deletable_route(route):
                route_id = str(route['id'])
                print(">> ", route_id)
                request_json.delete_route(route_id)
예제 #4
0
    def perf_route_deletion(self):
        """
        Performance test
        Route deletion ( 'amount' )
        Fast but no feedback
        """

        print("\n")

        json_data = self.get_route_list()
        amount_deleted = 0

        for route in json_data:
            if self.is_deletable_route(route):
                route_id = str(route['id'])
                request_json.delete_route(route_id)
                amount_deleted += 1

                if amount_deleted == self.amount:
                    break
예제 #5
0
    def test_modify_route(self):
        """
        Test to modify a temporaty route
        """

        # add test route
        self.add_default_route()

        # get the test route
        route_list = self.get_route_list()
        route = self.get_test_route(route_list)

        route_id = route['id']
        #old_route_modified_at = route['modified_at']
        old_route_ip = route['ip']
        old_route_next_hop = route['next_hop']
        old_route_community = route['communities']

        # update route
        request_json.put_route(route_id, self.modif_ip, self.modif_next_hop,
                               self.modif_community)

        # get the modified test route
        test = request_json.get_one_route(route_id)
        route = test.json()

        # TODO : 'modified_at' can't be tested unless we wait at least a minute
        # (would slow down the testing process)

        # check the differences
        self.assertEqual(route['ip'], self.modif_ip)
        self.assertEqual(route['next_hop'], self.modif_next_hop)
        self.assertEqual(route['communities'], [self.modif_community])
        self.assertNotEqual(route['ip'], old_route_ip)
        self.assertNotEqual(route['next_hop'], old_route_next_hop)
        self.assertNotEqual(route['communities'], old_route_community)

        # delete test route
        request_json.delete_route(route_id)
예제 #6
0
    def perf_route_destruction(self):
        """
        Performance test
        Route deletion ( all )
        """

        json_data = self.get_route_list()
        json_size = len(json_data)

        limit_percent = int(json_size/100)
        deletions = 0
        advancement = 0

        # print("json_size",json_size)
        # print("limit_percent",limit_percent)

        print(" ")
        print(json_size, "routes to destroy\n")

        self.show_advancement(advancement)

        # find the routes to delete
        for route in json_data:
            if self.is_deletable_route(route):
                route_id = str(route['id'])
                request_json.delete_route(route_id)

                deletions += 1
                advancement += 1

                if advancement > limit_percent:
                    advancement = 0
                    progress = int((deletions-1)/json_size*100)
                    self.show_advancement(progress)

        self.show_advancement(100)
예제 #7
0
def index(request):
    """
    Activated when trying to access the dashboard

    The entire dashboard will update for each modification.
    It would have been preferable to update only the concerned elements,
    but that would require javascript and more development time.

    :param request: the request page
    :return: dashboard for authenticated, login page for anonymous
    """
    global requestlist
    log_length = 500

    # AUTHENTIFICATION
    if not_auth(request):
        return redirect(settings.AUTH_URL)
    # AUTHENTIFICATION

    try:
        response = requests.get(settings.API_URL)
    except ConnectionError as exception:
        return render(request, 'error/Error503.html', {'exception': exception})

    if len(requestlist) > log_length:
        requestlist = ''
    try:
        json_data = response.json()
    except ValueError as exception:
        return render(request, 'error/Error409.html', {'exception': exception})
    if request.method == 'POST':
        form = PostForm(request.POST)

        json_data = sort_switcher(request.POST, json_data)
        if 'id_delete' in request.POST:
            response_actual = rq_json.delete_route(
                str(request.POST['id_delete']))
            requestlist = requestlist[:] + '| Delete ' + str(
                request.POST['id_delete']) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id_modify' in request.POST:
            response_actual = rq_json.put_route(
                str(request.POST['id_modify']), str(request.POST['ip']),
                str(request.POST['next_hop']),
                check_community(str(request.POST['communities'])))
            requestlist = requestlist[:] + '| Modify ' + str(
                request.POST['id_modify']) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id1' in request.POST:
            response_actual = rq_json.enable_disable_route(
                str(request.POST['id1']), False)
            requestlist = requestlist[:] + '| Disable ' + \
                str(request.POST['id1']) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id2' in request.POST:
            response_actual = rq_json.enable_disable_route(
                str(request.POST['id2']), True)
            requestlist = requestlist[:] + '| Enable ' + \
                str(request.POST['id2']) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id_to_delete' in request.POST:
            for key, values in request.POST.lists():
                if key == 'listed_id':
                    for value in values:
                        response_actual = rq_json.delete_route(str(value))
                        requestlist = requestlist[:] + '| Delete ' + \
                            str(value) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id_to_disable' in request.POST:
            for key, values in request.POST.lists():
                if key == 'listed_id':
                    for value in values:
                        response_actual = rq_json.enable_disable_route(
                            str(value), False)
                        requestlist = requestlist[:] + '| Disable ' + \
                            str(value) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'id_to_enable' in request.POST:
            for key, values in request.POST.lists():
                if key == 'listed_id':
                    for value in values:
                        response_actual = rq_json.enable_disable_route(
                            str(value), True)
                        requestlist = requestlist[:] + '| Enable ' + \
                            str(value) + ': ' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'export' in request.POST:
            exportfile = open(str(request.POST['export']), 'w')
            json.dump(json_data, exportfile)
            exportfile.close()
            return redirect(settings.DASHBOARD_URL)
        if 'import' in request.POST:
            try:
                importfile = open(str(request.POST['import']), 'r')
            except FileNotFoundError as exception:
                return render(request, 'error/Error404.html',
                              {'exception': exception})
            json_file = json.load(importfile)
            for to_import in json_file:
                response_actual = rq_json.post_new_route(
                    to_import['ip'], to_import['next_hop'],
                    check_community(to_import['communities']))
                requestlist = requestlist[:] + \
                    '| Post:' + str(response_actual) + ' '
            return redirect(settings.DASHBOARD_URL)
        if 'command_bgp' in request.POST:
            response_actual = rq_json.post_command_bgp(
                str(request.POST['command_bgp']))
            requestlist = requestlist[:] + \
                '| ExaBGP:' + str(response_actual.text) + ' '
        if form.is_valid():
            route = form.save(commit=False)
            response_actual = rq_json.post_new_route(
                str(route.ip), str(route.next_hop),
                check_community(str(route.community)))
            requestlist = requestlist[:] + '| Post:' + str(response_actual)
            return redirect(settings.DASHBOARD_URL)
    else:
        form = PostForm()
    return render(
        request, settings.TEMPLATE_DASHBOARD, {
            'data': json_data,
            'form': form,
            'sort': request.POST,
            'response': requestlist,
        })