Interoperability Testing
Transcript of Interoperability Testing
Interoperability Tests
w CWMPPraktyczne uwagi
O czym nie jest ten wykład?
Akademicka teoria testów interoperacyjności
Nie jestem ekspertem
Gotowe rozwiązania – nic tylko kopiować!
Uwagi i inspiracje
Internet of Things
Następnym razem!
Agenda
Ogólnie o IOT
CWMP – wprowadzenie
IOT w CWMP w przykładach
Podsumowanie
IOT - Definicja
Interoperacyjność to cecha produktu lub systemu, którego interfejsy funkcjonują
w pełnej zgodności, tak by współpracować z innymi produktami lub systemami,
które istnieją, bądź mogą istnieć w przyszłości, bez jakiegokolwiek ograniczenia
dostępu lub ograniczonych możliwości implementacji
Źródło: http://interoperability-definition.info
Po co IOT?
Polepszenie jakości naszego produktu
Sprawdzenie jak nasz produkt wypada na tle konkurencji
Obsłużenie większej ilości przypadków brzegowych
Programy certyfikacyjna – prestiż, większa szansa sprzedaży
Ktoś płaci
IOT - Przykłady
Zgodność z systemem operacyjnym
Protokoły komunikacyjne (różne warstwy)
WiFi
GSM/3G/LTE…
IOT – Stopnie zgodności
Kompatybilność Faktyczny standard Interoperacyjność
Źródło: http://interoperability-definition.info
Gniazdka ekektryczne
IOT – Kompatybilność – Przykłady
Technologie internetowe
Testy przeglądarek (CSS, JavaScript)
Rozmiary i orientacja ekranu (responsie layouts)
Typy urządzeń (komputer, tablet, smartphone)
IOT – Interoperacyjność - Przykłady
Technologie bezprzewodowe
Wifi/wimax/gsm/lte
Technologie przewodowe
DSL/FTTH/DOCSIS
IOT – Jak zacząć?
1. Specyfikacja – Co jest przedmiotem testów?
2. Zakres testów – Które elementy będziemy testować?
3. Scenariusze – W jaki sposób będziemy testować?
4. Raportowanie – Jak będziemy raportować?
5. Automatyzacja – Co możemy zautomatyzować?
6. Usprawnianie – Jak wyniki testów wpływają na proces testowania?
CWMP
Customer-Premises Equipment WAN Management Protocol – protokół zdalnego
zarządzania urządzeniami. Umożliwia zmianę konfiguracji, przeprowadzanie
diagnosty, aktualizacje firmware, restartowanie, przywrócenie ustawień
fabrycznych.
Cechy:
TR-069 – dojrzały protokół, opublikowany w maju 2004
Obowiązujący standard w świecie telco
Wyspecyfikowany Data Model (np. TR-181)
CWMP – Przykłady urządzeń
Routery – Home Gateway (DSL, DOSIS, FTTH)
DHCP, WiFi, Voice
IP Phone
WiMAX/LTE
STB – Set Tob Box
Femtocele
Smart Home Gateway
CWMP - Charakterystyka
Zalety Wady
CWMP - Komunikacja
Źródło: http://www.qacafe.com
CWMP - Stos
CWMP
SOAP/XML
HTTP
(SSL)
TCP/IP
Komunikacja CWMP
Źródło: http://www.qacafe.com
CWMP - Metody
GetParameterNames – odkrywanie nazw parametrów
GetParameterValues – pobieranie wartości parametrów
SetParameterValues – zmiana wartość parametrów
GetParameterAttributes – pobieranie atrybutów
SetParameterAttributes – ustawianie atrybutów
Download/Upload – transfer plików (np. backup konfiguracji)
AddObject/DeleteObject – zarządzanie dynamicznymi tablicami (port
forewarding)
Reboot/FactoryReset – restartowanie i przywracanie domyślnej konfiguracji
Przykłady testów - TCP
Ilość połączeń TCP na sesje CWMP
Standard nie określa zachowania
Praktyka – Jedno połączenie TCP na sesje CWMP
Wielkość ramki TCP
Dramatyczny wzrost rozmiaru sesji (np. 200kb -> 8MB)
Retransmisje
„Urywanie” sesji CWMP
Przykłady testów – HTTP/S
Autentykacja
Simple
Digest
Poprawność nagłówki
Sesja HTTP
Poprawność metod (PUT/POST)
Kompresja
SSL/TLS
Certyfikaty – dwukierunkowe!
Algorytmy szyfrowania – kompatybilność (np. z Java)
Chunked
4\r\n
Wiki\r\n
5\r\n
pedia\r\n
E\r\n
in\r\n
\r\n
chunks.\r\n
0\r\n
\r\n
Wikipedia in
chunks.
Źródło: https://en.wikipedia.org/wiki/Chunked_transfer_encoding
Przykłady testów – XML/SOAP
Poprawność XML
Zgodność z XSD
Domknięcia tagów
Znaki zabronione
np. backspace
Escepowanie wartości
Poprawność namespace’ów
<object name="InternetGatewayDevice.Time." access="readOnly" minEntries="1" maxEntries="1"
dmr:version="1.0">
<description>This object contains parameters relating an NTP or SNTP time client in the CPE.</description>
<parameter name="Enable" access="readWrite" dmr:version="1.4">
<description>Enables or disables the NTP or SNTP time client.</description>
<syntax>
<boolean/>
</syntax>
</parameter>
<parameter name="Status" access="readOnly" dmr:version="1.4">
<description>Status of Time support on the CPE. {{enum}}
The {{enum|Unsynchronized}} value indicates that the CPE's absolute time has not yet been set.
The {{enum|Synchronized}} value indicates that the CPE has acquired accurate absolute time; its current time
is
accurate.
The {{enum|Error_FailedToSynchronize}} value indicates that the CPE failed to acquire accurate absolute
time; its
current time is not accurate.
The {{enum|Error}} value MAY be used by the CPE to indicate a locally defined error condition.
</description>
<syntax>
<string>
<enumeration value="Disabled"/>
<enumeration value="Unsynchronized"/>
<enumeration value="Synchronized"/>
<enumeration value="Error_FailedToSynchronize"/>
<enumeration value="Error" optional="true"/>
</string>
</syntax>
</parameter>
Przykłady błędów
<cwmp:GetParameterValuesResponse>
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[2]">
<ParameterValueStruct>
<Name>InternetGatewayDevice.ManagementServer.PeriodicInformIntervaal<Name>
<Value xsi:type="xsd:unsignedInt">3600</Value>
</ParameterList>
</cwmp:GetParameterValuesResponse>
Przykłady błędów - rozwiązanie
<cwmp:GetParameterValuesResponse>
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[2]">
<ParameterValueStruct>
<Name>InternetGatewayDevice.ManagementServer.PeriodicInformIntervaal</Name>
<Value xsi:type="xsd:unsignedInt">3600</Value>
</ParameterValueStruct>
</ParameterList>
</cwmp:GetParameterValuesResponse>
CWMP - Sesja
Niepoprawne rozpoczynanie sesji
Inform/InformResponse i … ?
Poprawne zakańczanie sesji CWMP
Jakie niebezpieczeństwa niesie brak poprawnego zakończenia sesji?
Rozpoczynanie sesji w trakcie trwania poprzedniej
Przykłady testów - Inform
Podstawowa metoda – CPE rozpoczyna sesje
Poprawne parametry identyfikujące urządzanie (OUI/Serial number)
Poprawne typy Eventów
Boot/Bootstrap/Diagnostic Complete
Poprawny czas
Certyfikaty!
Obecność wymaganych parametrów
Przykład
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:cwmp="urn:dslforum-org:cwmp-1-2" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">8084849241369529875</cwmp:ID>
<cwmp:SupportedCWMPVersions soap:mustUnderstand="0">1.0,1.1,1.2,1.3,1.4</cwmp:SupportedCWMPVersions>
</soap:Header>
<soap:Body>
<cwmp:Inform>
<DeviceId>
<Manufacturer>AAAA</Manufacturer>
<OUI>BBBB</OUI>
<ProductClass>CCCC</ProductClass>
<SerialNumber>DDDD</SerialNumber>
</DeviceId>
<Event soap-enc:arrayType="cwmp:EventStruct[2]">
<EventStruct>
<EventCode>2 PERIODIC</EventCode>
<CommandKey />
</EventStruct>
<EventStruct>
<EventCode>1 BOOT</EventCode>
<CommandKey />
</EventStruct>
</Event>
<MaxEnvelopes>1</MaxEnvelopes>
<CurrentTime>2016-04-13T06:31:39+00:00</CurrentTime>
<RetryCount>0</RetryCount>
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[8]">
<ParameterValueStruct>
<Name>InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name>
<Value xsi:type="xsd:string">10.8.33.147</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name>
<Value xsi:type="xsd:string">n/a</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name>
<Value xsi:type="xsd:string">http://10.8.33.147:12131/connreq</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name>
<Value xsi:type="xsd:string">1.0</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name>
<Value xsi:type="xsd:string">development</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name>
<Value xsi:type="xsd:string"/>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name>
<Value xsi:type="xsd:string"/>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.DeviceSummary</Name>
<Value xsi:type="xsd:string">…</Value>
</ParameterValueStruct>
</ParameterList>
</cwmp:Inform>
</soap:Body>
</soap:Envelope>
Przykłady testów – Connection Request
Mechanizm
Jak to działa?
Problemy
HTTP (digest)
Udawanie autentykacji
Przykłady testów – Mechanizm Periodic
Przykłady testów – Transfery plików
Sesja CWMPDownload
RPC
DownloadResponse
Koniec sesji CWMP
Transfer pliku
Aplikacja (Reboot)
Sesja CWMP z TC
Transfer Complete
Transfer Complete Response
Koniec sesji CWMP
Przykłady testów – Transfery plików -
Problemy
Obsługiwane metody transferu
HTTP/S (z/bez autentykacji)
FTP (z/bez autentykacji)
Brak/niepoprawny Event w Inform
Brak TransferComplete
Niepoprawne czasy
Za krótki bufor na URL
Zła metoda HTTP (POST zamiast PUT przy Upload)
Przykłady testów – Diagnostyki
TR-143
Ping
Traceroute
Upload
Download
Jak działają diagnostyki w CWMP?
Przykłady testów – Diagnostyki
Sesja CWMPZlecenie
diagnostykiKoniec sesji
CWMP
DiagnostykaSesja CWMP
z DCPobranie wyników
Przykłady testów – Diagnostyki -
Problemy
Problemy ze zleceniem diagnostyki
Właściwa kolejność parametrów
Brak DiagnosticComplete w Inform
Za krótki bufor na URL – użyty adres jest za długi
Niepoprawne rezultaty
Min < Avg < Max
Failure + Success = Count
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">e2adc961</cwmp:ID>
</soap:Header>
<soap:Body>
<cwmp:SetParameterValues>
<ParameterList soap-enc:arrayType="cwmp:ParameterValueStruct[6]">
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.DSCP</Name>
<Value xsi:type="xsd:unsignedInt">0</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.DataBlockSize</Name>
<Value xsi:type="xsd:unsignedInt">64</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.NumberOfRepetitions</Name>
<Value xsi:type="xsd:unsignedInt">10</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.DiagnosticsState</Name>
<Value xsi:type="xsd:string">Requested</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.Host</Name>
<Value xsi:type="xsd:string">10.4.0.1</Value>
</ParameterValueStruct>
<ParameterValueStruct>
<Name>Device.LAN.IPPingDiagnostics.Timeout</Name>
<Value xsi:type="xsd:unsignedInt">5000</Value>
</ParameterValueStruct>
</ParameterList>
<ParameterKey>n/a</ParameterKey>
</cwmp:SetParameterValues>
</soap:Body>
</soap:Envelope>
Przykłady testów - Datamodel
Błędy w kluczach
InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.Ssid
InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID
InternetGatewayDevice.MY_CUSTOM_Logging.LogLevel
InternetGatewayDevice.X_0023C7_Logging.LogLevel
InternetGatewayDevice.WLANConfiguration.1.SSID
InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID
Złe wartości RW
Parametry konfiguracyjne dostępne jako RO
Złe typy parametrów
xsd:integer/xsd:string
Przykłady testów – Bezpieczeństwo
Poprawna obsługa haseł
CPE -> ACS
ACS -> CPE
Walidacja certyfikatów
Format ma znaczenie
Dbaj o czytelność logów!
<ParameterValueStruct><Name>InternetGatewayDevice.ManagementServer.PeriodicInfor
mInterval</Name><Value
xsi:type="xsd:unsignedInt">3600</Value></ParameterValueStruct>
<ParameterValueStruct>
<Name>InternetGatewayDevice.ManagementServer.PeriodicInformInterval</Name>
<Value xsi:type="xsd:unsignedInt">3600</Value>
</ParameterValueStruct>
Przechowywanie wyników
Opis testów
Wewnętrzny (techniczny)
Dla klienta (marketingowy)
Reporty - template raportu
Przyśpiesza prace
Standaryzacja
Baza danych to dobry pomysł!
Statystyki
Polecanie dobrych urządzeń
Narzędzia
Wireshark
Języki skryptowe
Python
Bash
Parsery XML (validacja XSD)
Dedykowane rozwiązanie
Pełna kontrola nad testami
Duża inwestycja
Zagrożenia i wyzwania
Niedojrzała specyfikacja
Brak standardów
Niepełne standardy
Standardy pozwalające na dużą „dowolność”
Mnogość implementacji
Słaba jakość
Długi czas fixowania błedów
Odkrycie problemu -> Przygotowanie łatki w bibliotece TR-069 -> Testy ->
Inetgracja z firmware -> Testy integracji -> Testy u Operatora -> deployment
Urządzenie/systemy „chytruski”
Uwaga na wersje oprogramowania!
Dobrze jest robić MD5
Automaty? Tak, ale…
Dla bardzo złych CPE stopień skomplikowania testów zaczyna przeszkadzać
Pokrycie tylko znanych przypadków
Bardzo trudna weryfikacja faktycznego działania
Ręczne rozwiązywanie problemów
Poza IOT
Testy „Serwisowe”
Czy to naprawdę działa?
Wydajność
Jak dużo wiadomość CWMP urządzenie jest w stanie obsłużyć?
Stabilność
Czy moduł CWMP nie zawiesza się?
Programy certyfikacji
Budują zaufanie
Rozpoznawalność marki
Podsumwanie
IOT – ciężki kawałek chleba
CWMP – dobry protokuł managementowy (choć nie bez wad)
Przygotuj się na wszystko!
Dowolne błędy na dowolnym poziomie
Niedostatki i nieścisłości specyfikacji
Czynnik ludzki
Pytania?
Dziękuję!