Made corrections

This commit is contained in:
Leon Schoch
2023-09-15 14:21:07 +02:00
parent 9361a08689
commit 3cf643bc1b
8 changed files with 31 additions and 27 deletions

View File

@@ -9,7 +9,7 @@
\section{Aufgaben}
Die \ac{API} ist die Schnittstelle des Service und außen stehenden Technologien wie der Anexia Engine.
Die \ac{API} ist die Schnittstelle des Service und außenstehenden Technologien wie der Anexia Engine.
Ihre Hauptaufgabe besteht darin, eine strukturierte Interaktionsmöglichkeit zu bieten, die es internen Benutzern über Systeme wie der Anexia Engine ermöglicht, \ac{BGP}-Routen mit zugehörigen \ac{BGP}-Communities in das Netzwerk zu injizieren.
Dies geschieht durch die Annahme von \ac{JSON}-Anfragen, die spezifische Informationen enthalten, nämlich IPv4- oder IPv6-Präfixe und die entsprechenden \ac{BGP}-Communities.
Die \ac{API} führt eine umfassende Validierung der eingehenden Daten durch, um sicherzustellen, dass die bereitgestellten Informationen korrekt und im erwarteten Format vorliegen.
@@ -246,7 +246,7 @@ def generate_bird_files(v4_routes, v6_routes, pybird, pybird6):
\newpage
Die Methode \verb|bird_config|, welche um eine gute Struktur zu wahren zu einer gesonderten Datei und Klasse angehört, ruft die \verb|get_communities| Methode der Route Dataclass auf, um die Routen in einer von Bird lesbares Format zu wandeln.
Die Methode \verb|bird_config|, welche um eine gute Struktur zu wahren zu einer gesonderten Datei und Klasse angehört, ruft die \verb|get_communities| Methode der Route Dataclass auf, um die Routen in ein von Bird lesbares Format zu wandeln.
Hier wurde das Prinzip des `Separation of Concerns` nicht eingehalten.
Im Idealfall sollte die Routenlogik und Birdlogik vollkommen voneinander getrennt sein.
Durch die Aufteilung des Codes in abgegrenzte Bereiche wird der Code übersichtlicher und leichter verständlich.
@@ -533,7 +533,7 @@ def create_heartbeat(consul, injector_id):
return session_id
\end{lstlisting}
Nach dem initialen Anlegen des Heartbeateintrages wird dieser alle fünf Sekunden erneuert und sicherzustellen, dass die \ac{TTL} des Eintrages nicht abläuft.
Nach dem initialen Anlegen des Heartbeateintrages wird dieser alle fünf Sekunden erneuert um sicherzustellen, dass die \ac{TTL} des Eintrages nicht abläuft.
\subsection{Emergency-Mode} %TODO RNDMISC-363
@@ -544,7 +544,7 @@ Der Emergency-Mode fungiert als eine Art Sicherheitsvorkehrung, die sicherstellt
Der Namensteil `Mode` lässt vermuten, dass es sich um einen tatsächlichen Operationsmodus handelt.
Dies ist allerdings nicht ganz korrekt.
Der Emergency-Mode ist eher als Funktionalitätserweiterung zu sehen und kann selbst dann aktiviert werden, wenn die Kommunikation zwischen \ac{API} und Injector intakt ist.
Dies ist insbesondere nützlich, wenn dringende Änderungen an den Routingeinstellungen erforderlich sind, die nicht auf die normale Kommunikation warten können.
%Dies ist insbesondere nützlich, wenn dringende Änderungen an den Routingeinstellungen erforderlich sind, die nicht auf die normale Kommunikation warten können.
Um Zugriff auf die Kommandozeile zu erhalten, muss ein Nutzer sich über \ac{SSH} auf den Injector einloggen.
Firmeninterne Automatismen stellen sicher, dass nur befugte Nutzer Zugriff auf das System haben.
@@ -636,7 +636,7 @@ Zur Vermeidung des Dirty read Problems, welches in der Vorlesung Datenbanken erl
So kann ein zweiter Prozess das Emergency File erst lesen, wenn der erste Prozess den Schreibvorgang abgeschlossen hat.
Dies dient nicht nur zur Mehrbenutzersynchronisation von mehreren Menschen, sondern hauptsächlich, dass der Hauptprozess nicht versucht das Emergency File zu lesen, während ein Operator mittels des Emergency Mode Änderungen vornimmt.
Da Python, beziehungsweise die benutze \ac{JSON} Bibliothek Probleme damit hatte verschachtelte \ac{JSON}s zu de- und enkodieren, wurde eine weitere Dataclass angelegt.
Da Python, beziehungsweise die benutzte \ac{JSON} Bibliothek Probleme damit hatte verschachtelte \ac{JSON}s zu de- und enkodieren, wurde eine weitere Dataclass angelegt.
Diese Dataclass dient nur als Container, um eine Liste an Routenobjekten anzulegen.
\begin{lstlisting}[language=python,
@@ -772,9 +772,9 @@ Dieser Abschnitt erläutert die Bedeutung und den Prozess des Unit-Testings für
Die Verwendung von Unit-Tests bietet mehrere Vorteile.
Sie ermöglichen die frühzeitige Erkennung von Fehlern und Unstimmigkeiten im Code.
Darüber hinaus dienen sie als Form der Dokumentation und unterstützen Refactoring-Bemühungen, um sicherzustellen, dass Änderungen den erwarteten Verhalten nicht beeinträchtigen.
Darüber hinaus dienen sie als Form der Dokumentation und unterstützen Refactoring-Bemühungen, um sicherzustellen, dass Änderungen das erwarteten Verhalten nicht beeinträchtigen.
Unit-Tests schaffen Vertrauen in die Software, da sie Fehler und Probleme offenlegen, bevor sie zu potenziell schwerwiegenden Problemen werden können.
Im Fall des Route Injection Service wurde das pytest als Testwerkzeug eingesetzt.
Im Fall des Route Injection Service wurde pytest als Testwerkzeug eingesetzt.
Die Testabdeckung ist von zentraler Bedeutung, da sie sicherstellt, dass jeder relevante Teil des Codes getestet wird.
Über den gesamten Route Injection Service wurde hier eine Codeabdeckung von 97\% erreicht.
Die Automatisierung von Unit-Tests gewährleistet, dass Tests konsistent und wiederholbar durchgeführt werden können.
@@ -787,8 +787,8 @@ Unit Testing ist ein fortlaufender Prozess, der die Qualität und Stabilität de
Die regelmäßige Aktualisierung und Erweiterung der Test Suite ist unerlässlich, um sicherzustellen, dass der Service den sich ändernden Anforderungen gerecht wird und robust bleibt.
Insgesamt trägt das Unit Testing maßgeblich zur Zuverlässigkeit und Leistungsfähigkeit des Route Injection Service bei.
Die Überprüfung der Funktionalität einer einzelnen Methode ist eines der Hauptaufgaben von Unit-Testing.
Da viele Methoden jedoch voneinander oder anderen Komponenten abhängig sind, müssen diese über `Mockings` ersetzt werden.
Die Überprüfung der Funktionalität einer einzelnen Methode ist eine der Hauptaufgaben von Unit-Testing.
Da viele Methoden jedoch voneinander oder anderen Komponenten abhängig sind, müssen diese über `Mocks` ersetzt werden.
Mittels der Python `unittest` Bibliothek ist dies sehr einfach möglich.
\newpage
@@ -831,11 +831,11 @@ class TestRespondStateToConsul(TestCase):
)
\end{lstlisting}
Die Mockings werden hier als Decorator übergeben, da die Methode anderen Methoden des Injectors aufruft und externe Abhängigkeiten wie die Consul oder Pybird Bibliothek besitzt.
Die Mocks werden hier als Decorator übergeben, da die Methode anderen Methoden des Injectors aufruft und externe Abhängigkeiten wie die Consul oder Pybird Bibliothek besitzt.
\textbf{Arrange (Vorbereiten):}
In Zeile 8--21 werden die Rückgabewerte der Mockings und Parameter der zu überprüfenden Methode festgelegt.
In Zeile 8--21 werden die Rückgabewerte der Mocks und Parameter der zu überprüfenden Methode festgelegt.
\textbf{Act (Ausführen):}