2024-06-28 18:06:04
  • Hello!
  • Whats ya doin?
  • ByeBye

[&]

3.138.101.110

Zadanie. Autoryzacja użytkownika

exercises: #40-authBasic.html

Testy jednostkowe. PHP Unit

Ćwiczenie: Testy systemu autoryzacji - samodzielna implementacja

Przygotowanie

  1. Użyj do pracy katalogu 40-php-unit
  2. Pobierz do katalogu pracy bibliotekę whichBrowser by rozszerzyć funkcjonalność klasy Sensor
  3. Zaimplementuj klasę DataBaseConn by poćwiczyć (łączenie, odczyt i zapis do BD) do egzaminu INF.03
  4. Uzupełnij testy oraz klasę programu zgodnie z załączonym diagramem UML
  5. Jednocześnie implementując klasy AuthBasic, DBC oraz Sensor wykonaj dokumentację kodu stosując standard DocBlock
1 Diagram klasy AuthBasic

Zaznaczone na czerwono metody zostały zaimplementowane poprzednio. Teraz należy zaimplementować compAuthCode() łączący się z BD by porównać Kod przesłany przez użytkownika z kodem zapisanym dla niego w BD.

CLD: AuthBasic

Uzupełnij program o klasy i funkcjonalności z poniższego diagramu klas:

CLD: DBC+Sensor

Po implementacji szkieletu klas DataBaseConn oraz Sensor należy przejść do przygotowywania (plików/klas) testów jednostkowych.

Zakładana struktura katalogów:

/ 40-php-unit
 |-- app/
 |  |-- libs/
 |  |  |-- whichBrowser/
 |  |  |  \-- ?? pliki biblioteki WB
 |  |  |-- DataBaseConn.php
 |  |  \-- Sensor.php
 |  \-- AuthBasic.php
 |-- tests/
 |  |-- AuthBasicTest.php
 |  |-- DataBaseConnTest.php
 |  \-- SensorTest.php
 |-- tool/
 |  \-- phpunit.phar

Narzędzie wywoływane z poziomu katalogu głównego 40-php-unit

2 Kroki do wykonania

Kroki realizacji testu:

  • Szkielet klasami testowymi z załączeniem Frameworka PHPUnit (jako Trait) oraz z załączeniem pliku testowanej klasy

  • Przygotowanie metod inicjujących instancje testowanej klasy oraz niszczących tę instancję po każdym teście

  • Implementacja testowanej klasy DataBaseConn i asercji dla niej

  • Implementacja testowanej klasy Sensor i asercji dla niej

  • Aktualizacja kodu (metod) klasy AuthBasic o zewnętrzne biblioteki Sensor oraz DataBaseConn

  • Wywołanie niezmienionego testu AuthBasicTest po aktualizacji metod klasy AuthBasic. Test powinien dalej przechodzić pomyślnie.

3 Wytyczne implementacji klasy Sensor

Metoda isLocal() powinna sprawdzać wszystkie lokalne adresy IPv4 oraz IPv6:

localhost, local, 127.0.0.1, ::1, 192.168.*

Metoda addrIp() powinna używać:

$_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_X_FORWARDER_FOR']

Metoda genFingerprint() używa mechanizmów:

  • podstawowego algorytmu: sha512

  • metody hash_hmac() przyjmującego wybrany algorytm, UserAgent string, Hash, wartość TRUE

  • UserAgent: tablica serwera $_SERVER['HTTP_USER_AGENT'] odczytuje informacje o przeglądarce klienta

  • Hash: metoda hash() przyjmujący w/w algorytm, adres IP klienta

  • Wyjście: TRUE tzw. Raw output

Metody browser() oraz system() odczytują odpowiednie informacje z biblioteki whichBrowser:

  • nazwa oraz wersja przeglądarki
  • nazwa systemu operacyjnego
4 Wytyczne implementacji klasy DBC

Implementacja klasy DataBaseConn jest jednocześnie przygotowanie do egzaminu INF.03, w którym należy zaimplementować:

  • połączenie z bazą danych przy użyciu danych dostępowych do lokalnego serwera

  • pobrać informacje z BD ze wskazanej tabeli (SELECT)

  • zmienić informacje w BD we wskazanej tabeli (INSERT, UPDATE)

  • usunąć informacje ze wskazanej tabeli

Po zaimplementowaniu klasy należy zamienić kod w klase AuthBasic, który symulował działania na Bazie danych poprzez zapis i odczyt do/z pliku tekstowego. Po tym działaniu należy wywołać test klasy/metody AuthBasic/createAuthToken() bez zmian w teście, a wynik powinien oznaczać, że po zmianach wszystko dalej działa poprawnie.

Podsumowanie

  1. Przygouj wyniki wykonanych test po aktualizacji klasy AuthBasic w postaci screenów oraz dostarczonych testów
  2. Umieść kod aplikacji oraz kod testów w Repozytorium
  3. Czas realizacji: 3 tygodnie