Testy jednostkowe. PHP Unit Ćwiczenie: Testy systemu autoryzacji - samodzielna implementacja Przygotowanie Użyj do pracy katalogu 40-php-unit Pobierz do katalogu pracy bibliotekę whichBrowser by rozszerzyć funkcjonalność klasy Sensor Zaimplementuj klasę DataBaseConn by poćwiczyć (łączenie, odczyt i zapis do BD) do egzaminu INF.03 Uzupełnij testy oraz klasę programu zgodnie z załączonym diagramem UML 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. Uzupełnij program o klasy i funkcjonalności z poniższego diagramu klas: 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.