summaryrefslogtreecommitdiffstats
path: root/tests/unit/benchmark/scenarios/networking/test_nstat.py
blob: 4b58e06c15f4231840a5b42d0b5c1129bfbc35f8 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python

##############################################################################
# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

# Unittest for yardstick.benchmark.scenarios.networking.nstat.Nstat

from __future__ import absolute_import

import unittest

import mock

from yardstick.benchmark.scenarios.networking import nstat


@mock.patch('yardstick.benchmark.scenarios.networking.nstat.ssh')
class NstatTestCase(unittest.TestCase):

    def setUp(self):
        self.ctx = {
            "host": {
                "ip": "192.168.50.28",
                "user": "root",
                "key_filename": "mykey.key"
            }
        }

    def test_nstat_successful_setup(self, mock_ssh):

        n = nstat.Nstat({}, self.ctx)
        n.setup()

        mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
        self.assertIsNotNone(n.client)
        self.assertTrue(n.setup_done)

    def test_nstat_successful_no_sla(self, mock_ssh):

        options = {
            "duration": 0
        }
        args = {
            "options": options,
        }
        n = nstat.Nstat(args, self.ctx)
        result = {}

        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'  # pylint: disable=line-too-long

        mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')

        n.run(result)
        expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
                           "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
                           "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
                           "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
                           "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
                           "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
        self.assertEqual(result, expected_result)

    def test_nstat_successful_sla(self, mock_ssh):

        options = {
            "duration": 0
        }
        sla = {
            "IP_datagram_error_rate": 0.1
        }
        args = {
            "options": options,
            "sla": sla
        }
        n = nstat.Nstat(args, self.ctx)
        result = {}

        sample_output = '#kernel\nIpInReceives                    1837               0.0\nIpInHdrErrors                   0                  0.0\nIpInAddrErrors                  2                  0.0\nIcmpInMsgs                      319                  0.0\nIcmpInErrors                    0                0.0\nTcpInSegs                       36               0.0\nTcpInErrs                       0                  0.0\nUdpInDatagrams                  1318                  0.0\nUdpInErrors                     0                  0.0\n'  # pylint: disable=line-too-long

        mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')

        n.run(result)
        expected_result = {"TcpInErrs": 0, "UdpInDatagrams": 1318,
                           "Tcp_segment_error_rate": 0.0, "IpInAddrErrors": 2,
                           "IpInHdrErrors": 0, "IcmpInErrors": 0, "IpErrors": 2,
                           "TcpInSegs": 36, "IpInReceives": 1837, "IcmpInMsgs": 319,
                           "IP_datagram_error_rate": 0.001, "Udp_datagram_error_rate": 0.0,
                           "Icmp_message_error_rate": 0.0, "UdpInErrors": 0}
        self.assertEqual(result, expected_result)

    def test_nstat_unsuccessful_cmd_error(self, mock_ssh):

        options = {
            "duration": 0
        }
        sla = {
            "IP_datagram_error_rate": 0.1
        }
        args = {
            "options": options,
            "sla": sla
        }
        n = nstat.Nstat(args, self.ctx)
        result = {}

        mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
        self.assertRaises(RuntimeError, n.run, result)


def main():
    unittest.main()


if __name__ == '__main__':
    main()