Interoperability Testing

Post on 13-Apr-2017

403 views 0 download

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ę!