44
Interoperability Tests w CWMP Praktyczne uwagi

Interoperability Testing

  • Upload
    kraqa

  • View
    412

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Interoperability Testing

Interoperability Tests

w CWMPPraktyczne uwagi

Page 2: Interoperability Testing

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!

Page 3: Interoperability Testing

Agenda

Ogólnie o IOT

CWMP – wprowadzenie

IOT w CWMP w przykładach

Podsumowanie

Page 4: Interoperability Testing

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

Page 5: Interoperability Testing

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

Page 6: Interoperability Testing

IOT - Przykłady

Zgodność z systemem operacyjnym

Protokoły komunikacyjne (różne warstwy)

WiFi

GSM/3G/LTE…

Page 7: Interoperability Testing

IOT – Stopnie zgodności

Kompatybilność Faktyczny standard Interoperacyjność

Źródło: http://interoperability-definition.info

Page 8: Interoperability Testing

Gniazdka ekektryczne

Page 9: Interoperability Testing

IOT – Kompatybilność – Przykłady

Technologie internetowe

Testy przeglądarek (CSS, JavaScript)

Rozmiary i orientacja ekranu (responsie layouts)

Typy urządzeń (komputer, tablet, smartphone)

Page 10: Interoperability Testing

IOT – Interoperacyjność - Przykłady

Technologie bezprzewodowe

Wifi/wimax/gsm/lte

Technologie przewodowe

DSL/FTTH/DOCSIS

Page 11: Interoperability Testing

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?

Page 12: Interoperability Testing

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)

Page 13: Interoperability Testing

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

Page 14: Interoperability Testing

CWMP - Charakterystyka

Zalety Wady

Page 15: Interoperability Testing

CWMP - Komunikacja

Źródło: http://www.qacafe.com

Page 16: Interoperability Testing

CWMP - Stos

CWMP

SOAP/XML

HTTP

(SSL)

TCP/IP

Page 17: Interoperability Testing

Komunikacja CWMP

Źródło: http://www.qacafe.com

Page 18: Interoperability Testing

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

Page 19: Interoperability Testing

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

Page 20: Interoperability Testing

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

Page 21: Interoperability Testing

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>

Page 22: Interoperability Testing

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>

Page 23: Interoperability Testing

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>

Page 24: Interoperability Testing

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

Page 25: Interoperability Testing

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

Page 26: Interoperability Testing

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>

Page 27: Interoperability Testing

Przykłady testów – Connection Request

Mechanizm

Jak to działa?

Problemy

HTTP (digest)

Udawanie autentykacji

Page 28: Interoperability Testing

Przykłady testów – Mechanizm Periodic

Page 29: Interoperability Testing

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

Page 30: Interoperability Testing

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)

Page 31: Interoperability Testing

Przykłady testów – Diagnostyki

TR-143

Ping

Traceroute

Upload

Download

Jak działają diagnostyki w CWMP?

Page 32: Interoperability Testing

Przykłady testów – Diagnostyki

Sesja CWMPZlecenie

diagnostykiKoniec sesji

CWMP

DiagnostykaSesja CWMP

z DCPobranie wyników

Page 33: Interoperability Testing

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>

Page 34: Interoperability Testing

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

Page 35: Interoperability Testing

Przykłady testów – Bezpieczeństwo

Poprawna obsługa haseł

CPE -> ACS

ACS -> CPE

Walidacja certyfikatów

Page 36: Interoperability Testing

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>

Page 37: Interoperability Testing

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ń

Page 38: Interoperability Testing

Narzędzia

Wireshark

Języki skryptowe

Python

Bash

Parsery XML (validacja XSD)

Dedykowane rozwiązanie

Pełna kontrola nad testami

Duża inwestycja

Page 39: Interoperability Testing

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

Page 40: Interoperability Testing

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

Page 41: Interoperability Testing

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

Page 42: Interoperability Testing

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

Page 43: Interoperability Testing

Pytania?

Page 44: Interoperability Testing

Dziękuję!