ASTRAD V011 module tests

Validation tests

Updated on 120112 by André Guimarães

Switzernet.com

1.     Introduction. 1

2.     Pre-requirements. 1

3.     Instructions. 2

4.     Specifications. 2

A.    Installation Method. 2

B.     SIP. 2

C.    Codecs. 2

D.    Databases. 3

E.     Errors and voice messages. 3

F.     Radius. 4

G.    Daemons. 4

H.    Call features. 5

I.      Radius unavailable – Master down/without service. 5

J.      Documentation and version. 5

5.     Test cases. 5

6.     Reference. 11

 

1.          Introduction

This document lists the specifications of Astrad version V011.

 

It also defines how to validate this version according to its previous and new specifications as well as normal use.

 

The Astrad V011 needs to be slave of a DBA V006.

 

2.          Pre-requirements

To be able to validate all tests you need:

o       Root access to a newly installed server with Debian Etch

o       Access to Puppet Master server. [5]

o       Login and password of MySQL for Astrads.

o       2 VoIP equipments to register on the test Astrad.

o       1 VoIP equipment registered on a Porta-SIP.

o       1 VoIP equipment registered on another Astrad.

o       1 external phone (phone connected to an external line Swisscom, Orange, VTX, etc)

3.          Instructions

Every test should be made to test a new version. To test a new installation only call tests are needed.

 

For each new Astrad version edit this document and add new tests as needed to fully cover all cases that might be affected by the new changes introduced in that version.

4.          Specifications

A.   Installation Method

To allow an easy replacement or addition of SIP servers the installation method should be easy to follow. It should respect the following conditions:

1.      The installation method is well documented;

2.      The installation should be made by Puppet. [5]

B.   SIP

An Astrad server purpose is to route VoIP calls, providing some basic functionalities to a SIP equipment or software configured with a valid account:

  1. may register in the SIP server ;
  2. can make calls to other phones registered in the same SIP server;
  3. can make calls from phones registered in other Switzernet SIP servers (Astrads or Porta-SIPs);
  4. can make calls to a phone in PSTN;
  5. can receive calls from each of the phones in the previous cases.

It also should be possible to:

  1. see all active calls from every server;
  2. see the User Agent information on the Accounts page in Billing when a phone is registered.

C.   Codecs

The following codecs should be available:

  • alaw
  • ulaw 
  • gsm
  • slin
  • ilbc
  • speex 
  • g723
  • g726
  • g729

D.   Databases

For an increased performance, Astrad should have a local replication of Billing Masters database. The local tables should be simplified versions of Masters tables with only the required information to the correct functioning of the system. It should follow these guidelines:

  1. The local replication should be made indirectly from the tables that exists on DBAs (that are simplified versions of the Billing Master database);
  2. A table named sipdevices should exist will all SIP accounts, nodes and vendors with the appropriate permissions to make and receive calls;
  3. After a successful registration/unregistration of a customer account, his phone’s information should appear immediately in the sipdevices table;
  4. If a customer disconnects without unregistering, his phone’s information should be cleaned after expiration and before one hour.

E.   Errors and voice messages

When a customer makes a new call, certain requirements and conditions should be met to allow a successful call. If not the user should hear the corresponding error message in the language configured in Billings web interface if available. Each error has its own voice message. [4

  1. The login/password of a SIP account is verified. If they’re incorrect the customer mustn’t be able to place calls. A message should be heard when the password is incorrect
  2. The credit of the user is verified. If it is superior to the customer’s limit the call should fail. The customer should hear a message saying he is over the limit when he passes the credit limit.
  3. The customer’s block state is verified. If he is blocked he can’t make calls from any of his accounts. He should hear a message indicating that his account is blocked.
  4. The customer’s account block state is verified. If the account is blocked he cannot make a call form that account. He should hear a message indicating that his account is blocked.
  5. The expiration date of an account is verified. If this date is passed the customer cannot make calls. A message should be heard indicating that the account has expired.
  6. On the compatible devices a message should be heard stating that the call is free when an internal destination is called.
  7. All calls should be limited to 2 hours maximum. 2 minutes before the 2 hours limit (or before if the call length set by Porta-Billing was inferior) the customer should hear a message indicating that the call will be hung up and after that he should hear a message every 30 seconds.
  8. Private customer’s calls should be limited to the value configured. If a private customer is already making calls from a phone the new call should fail if the number of active calls is equal to the limit set.
  9. If a customer calls a blocked number (due to fraud for instance) the call should be blocked and he should hear a message indicating that he called an invalid number.
  10. When someone calls a non registered number a message should be played informing the number is not registered.
  11. All messages above messages should be available at least in English, German and French.

F.    Radius

Call messages compatibility is very important. Radius packets should be correctly transmitted to the compatibility server. 

  1. The Master receives a Radius packet "STOP" from a communication.
  2. The following fields must exist in the "STOP" Radius packet sent:
    • NAS-IP-Address: IP address of the SIP server that sent the packet
    • User-Name: IP node or account ID which made the call
    • Called-Station-Id: Destination
    • Calling-Statition-Id: Can be different from customer’s account ID.
    • Acct-Status-Type
    • h323-call-origin: originate if it is an outgoing call and answer for an incoming call.
    • h323-call-type
    • h323-setup-time
    • h323-connect-time
    • h323-disconnect-time
    • h323-disconnect-cause
    • h323-conf-id: Call identifier in format "XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX"
    • call-id
    • Acct-Session-Time
    • session-protocol
    • h323-remote-address: IP address from where the SIP request was originated. 
  1. The time should be in GMT or UTC format 

G.  Daemons

On the SIP server, 5 daemons should be continuously working.

  1. One command should show the status, start, stop or restart those daemons.
  2. This command should output the available arguments.
  3. One daemon should manage the sending of the Radius compatibility packets. (ast-rad-acc.pl)
  4. Another daemon should try to resend the Radius compatibility packets that failed. (ast-resend-lost.pl)
  5. Another daemon should fill the table location2 in its Master DBA with all registrations made in the Astrad. (ast-registration.pl)
  6. A daemon is responsible for sending notify messages. (ast-send-notify.pl)
  7. A daemon is responsible for sending NAT keep alives. (ast-send-empty.pl)
  8. When a daemon dies, an email should be sent and the process should be restarted automatically.

H.   Call features

1.      The customer should be able to choose in which language he hears the messages in the SIP server (at least for English, French and German).

2.      When a call is put on hold the other person should hear music.

3.      Customers should be able to hide/show their caller id number.

4.      Customers should be able to mask their caller id number.

5.      If a customer registers more than one phone with the same account all phones should ring simultaneously when the number is called.

6.      If a customer defines Follow Me the incoming calls should follow the configured rules.

I.        Radius unavailable – Master down/without service

In case of problems in central server, there should be an authentication alternative. [2

  1. The specifications in B should be respected even when Master is down.
  2. The specifications in E should be respected even when Master is down.
  3. The specifications in F should be respected when Master recovers.
  4. The specifications in H should be respected even when Master is down.

J.    Documentation and version

For each new version of an Astrad server, there should be two documents: one describing the changes in the version and other (this) with the required tests to validate those changes. Both documents should have links to related tests and developing documentation. It is also required:

  1. Describe the changes in the web page listing all versions. [3]
  2. Add a zip file to that web page with the module. [3]
  3. Add a link to the detailed documentation of the version in that page.

5.          Test cases

CT

Spec

Task

Result

Success

1.1

A.1

On the Puppet Master server, open the module for this version and check the contents of its root

A readme file, a document describing how to install the version or a hyperlink describing how to install the version should be visible in the root folder of the module.

1.2

A.2

In a newly installed Debian server follow the instructions of A1 file

 

On the second execution of the following command (after the Master accepts the key)

puppetd --server puppet.switzernet.com --test

you shouldn’t see any error message (yellow color) during the installation. You shouldn’t also see any Warning message (violet) except for the occasional XML error “XMLRPC returned wrong size.  Retrying.”.

2.1

B.1

B.7

Register two phones in the new server with valid accounts.

The phone registers without showing any error message. On Accounts page in Billing the user agent and IP address are correctly filled.

2.2

B.2

From one of the registered phones call the other phone. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.3

B.3

From one of the registered phones call a phone in a Porta-SIP. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.4

B.4

From one of the registered phones call a phone in an Astrad. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.5

B.5

From one of the registered phones call a phone in the public network (ex. Swisscom, Orange, VTX). The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.6

B.6

From a phone registered in a Porta-SIP call one of the registered phones. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.7

B.6

From a phone registered in an Astrad call one of the registered phones. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

2.8

B.6

From an external phone (ex. Swisscom, Orange, VTX) call one of the registered phones. The call should be longer than 45 seconds.

The other phone rings and after answering there is sound in both directions

3.1

C.1

In the Astrad server execute the commande :

astrad:~# asterisk -rx "core show translation"

Every column should be filled with values except for siren7 and 14 and g719

           g723   gsm  ulaw  alaw g726aal2 adpcm  slin lpc10  g729 speex  ilbc  g726  g722 siren7 siren14 slin16  g719 speex16 testlaw

     g723     -     2     2     2     4002     2     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       2

      gsm 12001     -  4001  4001     8001  4001  4000  4001  8001 12000 12000  8000  4001      -       -   4001     -    8001    4001

     ulaw  8002     2     -     1     4002     2     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       2

     alaw  8002     2     1     -     4002     2     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       2

 g726aal2  8002     2     2     2        -     2     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       2

    adpcm  8002     2     2     2     4002     -     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       2

     slin  8001     1     1     1     4001     1     -     1  4001  8000  8000  4000     1      -       -      1     -    4001       1

    lpc10  8002     2     2     2     4002     2     1     -  4002  8001  8001  4001     2      -       -      2     -    4002       2

     g729  8002     2     2     2     4002     2     1     2     -  8001  8001  4001     2      -       -      2     -    4002       2

    speex 12001  4001  4001  4001     8001  4001  4000  4001  8001     - 12000  8000  4001      -       -   4001     -    8001    4001

     ilbc 12001  4001  4001  4001     8001  4001  4000  4001  8001 12000     -  8000  4001      -       -   4001     -    8001    4001

     g726  8002     2     2     2     4002     2     1     2  4002  8001  8001     -     2      -       -      2     -    4002       2

     g722  8002     2     2     2     4002     2     1     2  4002  8001  8001  4001     -      -       -      1     -    4001       2

   siren7     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -

  siren14     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -

   slin16  8003     3     3     3     4003     3     2     3  4003  8002  8002  4002     1      -       -      -     -    4000       3

     g719     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -

  speex16 12004  4004  4004  4004     8004  4004  4003  4004  8004 12003 12003  8003  4002      -       -   4001     -       -    4004

  testlaw  8002     2     2     2     4002     2     1     2  4002  8001  8001  4001     2      -       -      2     -    4002       -

 

4.1

D.2

On the Astrad server enter MySQL and execute the following command to show the existing tables in DB asterisk :

mysql -uroot -p asterisk

mysql> SHOW TABLES;

 

You should have at least the tables:

+-----------------------+

| Tables_in_asterisk    |

+-----------------------+

| location3             |

| multiple_ua           |

| radius_packets_Failed |

| registration          |

| route_multiple_ua     |

| sipconfig             |

| sipdevices            |

| sipdevices2           |

+-----------------------+

4.2

D.2

Still inside MySQL, select the 50 first lines to verify if there are nodes and users inside the table:

mysql> SELECT * FROM sipdevices order by context desc LIMIT 50;

mysql> SELECT count(*) FROM sipdevices;

You should see a list with all vendors and nodes (Astrads and Porta-SIPs) and some customers (about 15000 accounts). The context should be fromaccount in all customers, fromnode for each node, fromhost in each vendor and forbidden for unused previous servers (nodes or vendors).

 

+----+-----------------+----------------------------------+-----------------+------+-------------+----------+

| id | name            | md5secret                        | host            | port | context     | insecure |

+----+-----------------+----------------------------------+-----------------+------+-------------+----------+

|…                                                                                                          |

| 29 | 91.121.16.79    | NULL                             | 91.121.16.79    | 5060 | fromnode    | port     |

|…                                                                                                          |

|  5 | 212.249.15.3    | NULL                             | 212.249.15.3    | 5060 | fromhost    | port     |

|…                                                                                                          |

| 16 | 412X55XXXXX     | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | dynamic         | NULL | fromaccount | no       |

|…                                                                                                          |

+----+-----------------+----------------------------------+-----------------+------+-------------+----------+

 

4.4

D.3

Execute the following query where 4121550xxxx is an unregistered account:

mysql> SELECT * FROM location3 WHERE username="4121550xxxx";

Configure one of the phones with that account. Immediately after execute the query:

mysql> SELECT * FROM location3 WHERE username ="4121550xxxx";

 

The first query should not return any results.

The second query should return only one result with the correct IP address, port and user agent.

4.5

D.5

Execute the following query:

mysql> SELECT * FROM location3 WHERE name="4121550xxxx";

Unplug the registered phone (without unregistering) with the number 4121550xxxx.

Execute the same query after 5 minutes:

mysql> SELECT * FROM location3 WHERE name="4121550xxxx";

After this test reconnect the device!

The first query should return only one result with the correct IP address, port and user agent.

The second query should not return any results.

5.1

E.1

Reconfigure one of the phones with the wrong password.

After this test insert the correct password on the device!

The phone should show a message showing that it could not register.

5.2

E.2

In Porta-Billing, in the Accounts page change the credit limit to a value equal or bellow the balance (the account type should be prepaid). Make a call to a paid destination.

After this test return the credit limit to the previous value!

It is not possible to call that destination and you should hear a voice message in the configured language saying that you passed the credit limit.

5.3

E.3

In Porta-Billing, in the Accounts page block the account. Make a call to an existing destination.

After this test unblock the account!

It is not possible to call that destination and you should hear a voice message in the configured language saying the account is blocked.

5.4

E.4

In Porta-Billing, in the Customers page block the customer. Make a call to an existing destination.

After this test unblock the customer!

It is not possible to call that destination and you should hear a voice message in the configured language saying the account is blocked.

5.5

E.5

In Porta-Billing, in the Accounts page change the account expiration date. Make a call to an existing destination.

After this test change back the account expiration date!

It is not possible to call that destination and you should hear a voice message in the configured language saying the account has expired.

5.6

E.6

Register a Linksys SPA 921 and make a call to a free destination inside Switzernet network.

Before the call establishment you should hear a message saying that the call is free in the configured language.

 

5.7

E.7

Make a call of over 2 hours to any destination.

Before reaching the two hours you should hear a message indicating that the call will be disconnected. After that each 30 seconds a reminder should be played. The call should be automatically disconnected after 2 hours.

 

5.8

E.8

From a Private account with maximum simultaneous call set as 1, make a call. From another phone with the same login and password (or from the second line if supported by the phone) make a seconds call.

The second call should fail and you should hear a voice message in the configured language saying the simultaneous calls limit has been reached.

5.9

E.9

Visit https://www.intarnetinc.com/rates.html, click on the Rate named Dead End, then Rates and filter by effective from Now Prefix. Then call one of those prefixes.

It is not possible to call that destination and you should hear a voice message in the configured language saying the number is invalid.

5.10

E.10

Call a Switzernet net number which is not currently registered

The call should fail and you should hear a voice message in the configured language saying the number wasn’t found.

5.11

E.11/H.1

In Porta-Billing, in the Accounts > Call Features page change the Preferred IVR Language to one of the following languages: en, fr or de (different from the one it was already configured) and redo tests 5.2 through 5.10 for each other language.

You should start hearing the error messages in the select language.

6.1

F.1

Make a call to an external number. Access Porta-Billing > Trace Call. Find the call filtering by the destination number in the last 10 minutes. Click on  to see the call details, then press

In the view log there is a message containing the following fields;

 

NAS-IP-Address                   = '<ip_du_serveur_astrad>'

Acct-Status-Type                 = 'Stop'

h323-call-origin                 = 'originate'

 

6.2

F.2

Still in the same log, read each of the parameters of the message found in 6.1

Each parameter listed in the F.2 specification is present.

6.3

F.3

Still in the same log, read each of the parameters of the message found in 6.1

The time of connection, call establishment and disconnection are in GMT format.

7.1

G.1

Execute the following command as root:

/etc/init.d/astrad status

 

This command returns the state of asterisk and of all astrad daemons. Each line should return the PID of the corresponding process.

7.2

G.1

Execute the following command as root (with astrad processes running):

/etc/init.d/astrad stop

/etc/init.d/astrad status

 

This command should return ok for each line indicating the processes are stopped. When executing again the command in 7.2 each process should show stopped as a result.

7.3

G.1

Execute the following command as root (with astrad processes stopped):

/etc/init.d/astrad start

/etc/init.d/astrad status

 

This command should return ok for each line indicating the processes are stopped. When executing again the command in 7.2 each process should show the new PID (different from 7.2) as a result.

7.4

G.1

With astrad already stopped execute:

/etc/init.d/astrad stop

 

This command should indicate that everything is stopped.

7.5

G.1

With astrad already running execute:

/etc/init.d/astrad start

/etc/init.d/astrad status

 

It should warn that astrad is already running and the returned PIDs shouldn’t change.

7.6

G.2

Execute without arguments :

/etc/init.d/astrad

 

A list of arguments should be shown.

7.7

G.8

Execute status to obtain the PID of a process and execute the following command to kill the process.

kill -9 PID

 

After a maximum of one minute an email should be sent to alerts2@unnappel.ch and the daemon stopped should be running again.

8.1

H.2

Make a call to any valid number. While on call put the other person on hold. Go back to the call again and proceed with the call.

The other phone should start to hear music while on hold. After returning to the call voice should be able to go in the two directions.

8.2

H.3

In Porta-Billing, in the Accounts > Call Features page enable the option Hide CLI prefix. Choose a Show CLI prefix (e.g. *81). Make an internal call using the prefix (e.g. *8102X55XXXXX).

The destination should not see the caller id. The call should be anonymous.

 

8.3

H.3

In Porta-Billing, in the Accounts > Call Features page enable the option Hide CLI prefix. Choose a Show CLI prefix (e.g. *81). Make an external call using the prefix (e.g. *810XXXXXXX).

The destination should not see the caller id. The call should be anonymous.

 

8.4

H.4

In Porta-Billing, in the Accounts > Call Features set the option “Set CLI To Account ID” to No. In “Set CLI To Centrex” choose another caller id.

The destination should see the chosen caller id.

 

8.5

H.5

Register two phones with the same account. From an external phone call the account number.

Both phones should ring at the same time. After one of the phones is answered the other phone should stop ringing.

8.6

H.6

In Porta-Billing, in the Accounts > Call Features page enable the option “Follow Me Enabled”. In Accounts > Follow Me create a follow me rule of type Always or When Unavailable with an order of your choosing. Add one or more Follow Me rules.

When calling the account number the call should be redirected immediately if the Always option was selected or after a timeout if the phone didn’t answer if option When Unavailable was checked. The order and times of the configured rules should be respected.

9.0

To prepare the following tests execute the following commands on the Astrad server. These commands will block all communication from and to the Billing Master:

iptables -A OUTPUT -d <ip_master> -j DROP

iptables -A OUTPUT -s <ip_master> -j DROP

 

After finishing tests 8.1, 8,2 and 8.3 remove the added iptables rules from the firewall to restablish connectivity:

iptables -D OUTPUT -d <ip_master> -j DROP

iptables -D OUTPUT -s <ip_master> -j DROP

 

9.1

I.1

Redo tests CTs 2.1 to 2.6

The results should be the same as in CTs 2.1 to 2.6

9.2

I.2

Redo tests CTs 5.1 to 5.6

The results should be the same as in CTs 5.1 to 5.6

9.3

I.4

Redo tests CTs 8.2 to 8.6

The results should be the same as in CTs 8.2 to 8.6

9.4

I.3

Redo tests CTs 6.1 to 6.3. After disconnecting the call in 6.1 reestablish connection with the Master as described above.

The results should be the same as in CTs 6.1 to 6.3

 

10.1

J.1

Visit the Astrad versioning web page [3]

Go to this version chapter.

The chapter exists and the modifications are listed briefly.

10.2

J.2

Download the module file proposed in the Astrad versioning web page for this version. [3]. In cygwin use the following command with the downloaded file:

md5sum.exe yymmdd,hhmm,astrad,vvv.zip

The file is downloaded without a problem and the result of the md5sum is the same as the one in the versions web page.

10.3

J.3

In the same chapter click on the link for further documentation.

The document exists and details the implementation of this version.

10.4

J.0

Check the reference chapter in the document visited in 10.3.

All documents describing the implementations made on this version are in the list and the all links work.

 

 

 

6.          Reference

 

[1] Installation astrad

http://ftp.switzernet.com/3/public/110931-migrate-to-astrad

 

 

[2] Authentification alternative en cas de panne Radius

http://www.switzernet.com/3/public/110328-astrad-alternative-radius-auth

 

 

[3] Astrad versioning

http://switzernet.com/3/public/110126-astrad-versions

 

 

[4] Gestion des messages vocaux

http://switzernet.com/2/public/100719-asterisk-update

 

 

[5] Introduction à Puppet

http://switzernet.com/3/public/110127-puppet-introduction

 

 

[6] Porta-Billing

https://www.intarnetinc.com/

 

 

[7] DBA installation

http://switzernet.com/3/public/111025-install-dba

 

 

[8] Astrad V011

http://ftp.switzernet.com/3/public/120106-astrad-V11

 

 

[9] DBA V006

http://ftp.switzernet.com/3/public/111114-dba-v6