summaryrefslogtreecommitdiff
path: root/test-cli/test/tests/qwifi.py
blob: 4695041b41addcbe8c17ef416731b474a985edd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import unittest
import time
import uuid
import iperf3
import netifaces
from test.helpers.iw import iwScan
from test.helpers.utils import save_json_to_disk
from test.helpers.utils import station2Port

class Qwifi(unittest.TestCase):
    __serverip = None
    __numbytestx = None
    __bwexpected = None
    __port = None
    params = None
    __bwreal = None
    __resultlist = None  # resultlist is a python list of python dictionaries
    timebetweenattempts = 5

    # varlist content: serverip, bwexpected, port
    def __init__(self, testname, testfunc, varlist):
        self.params = varlist
        super(Qwifi, self).__init__(testfunc)
        self._testMethodDoc = testname
        self.__xmlObj = varlist["xml"]
        self.__QwifiName = varlist.get('name', 'qwifi')
        self.__loops = varlist.get('loops', self.__xmlObj.getKeyVal(self.__QwifiName, "loops", "1"))
        self.__port = varlist.get('port', self.__xmlObj.getKeyVal(self.__QwifiName, "port", "5000"))
        self.__bw = varlist.get('bwexpected', self.__xmlObj.getKeyVal(self.__QwifiName, "bwexpected", "5.0"))
        self.__serverip = varlist.get('serverip', self.__xmlObj.getKeyVal(self.__QwifiName, "serverip", "localhost"))
        self.__duration = varlist.get('duration', self.__xmlObj.getKeyVal(self.__QwifiName, "duration", "10"))
        self.__interface = varlist.get('interface', self.__xmlObj.getKeyVal(self.__QwifiName, "interface", "wlan0"))
        self.__toPath = varlist.get('to', self.__xmlObj.getKeyVal(self.__QwifiName, "to", "/mnt/station_ramdisk"))
        self.__retriesCount = varlist.get('retries', self.__xmlObj.getKeyVal(self.__QwifiName, "retries", "5"))
        self.__waitRetryTime = varlist.get('wait_retry', self.__xmlObj.getKeyVal(self.__QwifiName, "wait_retry", "10"))
        self.__wifi_res_file = varlist.get('wifi_res_file', self.__xmlObj.getKeyVal(self.__QwifiName, "wifi_res_file", "wifi_test_{}.json"))
        self.__wifi_st_file = varlist.get('wifi_st_file', self.__xmlObj.getKeyVal(self.__QwifiName, "wifi_st_file", "wifi_st_{}.json"))
        self.__file_uuid = uuid.uuid4()
        self.__wifi_res_file = self.__wifi_res_file.format(self.__file_uuid)
        self.__wifi_st_file = self.__wifi_st_file.format(self.__file_uuid)
        self.__resultlist = []

    def checkInterface(self, reqInterface):
        ifaces = netifaces.interfaces()
        for t in ifaces:
            if t == reqInterface:
                return True
        return False

    def execute(self):
        self.__resultlist = []
        stationList = {}
        # check interfaces
        if not self.checkInterface(self.__interface):
            self.fail('Interface not found: {}'.format(self.__interface))
        # scan networks
        scanner = iwScan(self.__interface)
        if scanner.scan():
            stationList = scanner.getStations()
            # check if we are connected
            if not scanner.findConnected():
                self.fail('Not connected to test AP')
        else:
            strError = scanner.getLastError()
            self.fail('qWifi scanner Execution error: {}'.format(strError))
        # Start Iperf
        client = iperf3.Client()
        client.duration = int(self.__duration)
        client.server_hostname = self.__serverip
        client.port = station2Port(self.__port)
        count = int(self.__retriesCount)
        while count > 0:
            result = client.run()
            if result.error == None:
                if result.received_Mbps >= float(self.__bw) and result.sent_Mbps >= float(self.__bw):
                    save_json_to_disk(filePath='{}/{}'.format(self.__toPath, self.__wifi_st_file),
                          description='wifi scan',
                          mime='application/json',
                          json_data=stationList,
                          result=self.__resultlist)
                    save_json_to_disk(filePath='{}/{}'.format(self.__toPath, self.__wifi_res_file),
                          description='wifi {} iperf3'.format(self.__interface),
                          mime='application/json',
                          json_data=result.json,
                          result=self.__resultlist)
                    return
                else:
                    self.fail('bw fail: rx:{} tx:{}'.format(result.received_Mbps, result.sent_Mbps))
            else:
                count = count - 1
                time.sleep(int(self.__waitRetryTime))

        self.fail('qWifi (max tries) Execution error: {}'.format(result.error))

    def getresults(self):
        return self.__resultlist

    def gettextresult(self):
        return ""