def test_map_bidi(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/003'.format(address)
        dst_port = '{}/1/004'.format(address)
        self.driver_commands._mapping_check_delay = 0.1

        connected_port_show_a = set_port_connected('E3', 'W4',
                                                   PORT_SHOW_MATRIX_A)
        connected_port_show_a = set_port_connected('E4', 'W3',
                                                   connected_port_show_a)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_A),
            Command(
                'connection create A3 to A4',
                '''ROME[TECH]# connection create A3 to A4
OK - request added to pending queue (A3-A4)
ROME[TECH]# 08-06-2019 09:01 CONNECTING...
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E3[1AE3]<->W4[1AW4] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E4[1AE2]<->W3[1AW3] OP:connect
08-06-2019 09:01 Connection A3<->A4 completed successfully
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', connected_port_show_a),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_bidi(src_port, dst_port)

        emu.check_calls()
    def test_map_clear_to_matrix_b(self):
        host = '192.168.122.10'
        address = '{}:B'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/249'.format(address)
        dst_ports = ['{}/1/253'.format(address)]
        self.driver_commands._mapping_check_delay = 0.1

        disconnected_port_show_b = set_port_disconnected(
            'E249', PORT_SHOW_MATRIX_B)
        disconnected_port_show_b = set_port_disconnected(
            'W249', disconnected_port_show_b)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_B),
            Command(
                'connection disconnect E249 from W253',
                '''ROME[TECH]# connection disconnect E249 from W253
OK - request added to pending queue (E249-W253)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E249[1AE249]<->W253[1AW253] OP:disconnect
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', disconnected_port_show_b),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_clear_to(src_port, dst_ports)

        emu.check_calls()
    def test_map_bidi_one_connection(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/001'.format(address)
        dst_port = '{}/1/002'.format(address)
        self.driver_commands._mapping_check_delay = 0.1

        connected_port_show_a = set_port_connected('E2', 'W1',
                                                   PORT_SHOW_MATRIX_A)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_A),
            Command(
                'connection create A1 to A2',
                '''ROME[TECH]# connection create A1 to A2
OK - request added to pending queue (A1-A2)
ROME[TECH]# 08-06-2019 09:01 CONNECTING...
08-06-2019 09:01 CONNECTION OPERATION SKIPPED(already done):E1[1AE1]<->W2[1AW2] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E2[1AE2]<->W1[1AW1] OP:connect
08-06-2019 09:01 Connection A1<->A2 completed successfully
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', connected_port_show_a),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_bidi(src_port, dst_port)

        emu.check_calls()
    def test_map_uni_a_few_checks(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/003'.format(address)
        dst_ports = ['{}/1/004'.format(address)]

        self.driver_commands._mapping_check_delay = 0.1

        connected_port_show_a = set_port_connected('E3', 'W4',
                                                   PORT_SHOW_MATRIX_A)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_A),
            Command('connection create E3 to W4',
                    '''ROME[TECH]# connection create E3 to W4'''),
            Command(
                'connection show pending',
                get_connection_pending('E3', 'W4'),
            ),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', connected_port_show_a),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_uni(src_port, dst_ports)

        emu.check_calls()
    def test_map_clear_to_matrix_q(self):
        host = '192.168.122.10'
        address = '{}:Q'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/1'.format(address)
        dst_ports = ['{}/1/2'.format(address)]
        self.driver_commands._mapping_check_delay = 0.1

        disconnected_ports_show = set_port_disconnected(
            'E1', PORT_SHOW_MATRIX_Q)
        disconnected_ports_show = set_port_disconnected(
            'E2', disconnected_ports_show)
        disconnected_ports_show = set_port_disconnected(
            'E129', disconnected_ports_show)
        disconnected_ports_show = set_port_disconnected(
            'E130', disconnected_ports_show)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q),
            Command(
                'connection disconnect E1 from W4',
                '''ROME[TECH]# connection disconnect E1 from W4
OK - request added to pending queue (E1-W4)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E1[1AE1]<->W4[1AW4] OP:disconnect
'''),
            Command(
                'connection disconnect E129 from W132',
                '''ROME[TECH]# connection disconnect E129 from W132
OK - request added to pending queue (E129-W132)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E129[1AE129]<->W2[1AW132] OP:disconnect
'''),
            Command(
                'connection disconnect E130 from W131',
                '''ROME[TECH]# connection disconnect E130 from W131
OK - request added to pending queue (E130-W131)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E130[1AE130]<->W131[1AW131] OP:disconnect
'''),
            Command(
                'connection disconnect E2 from W3',
                '''ROME[TECH]# connection disconnect E2 from W3
OK - request added to pending queue (E2-W3)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E2[1AE2]<->W3[1AW3] OP:disconnect
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', disconnected_ports_show),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_clear_to(src_port, dst_ports)

        emu.check_calls()
    def test_map_bidi_q_ports(self):
        host = '192.168.122.10'
        address = '{}:Q'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/003'.format(address)
        dst_port = '{}/1/004'.format(address)
        self.driver_commands._mapping_check_delay = 0.1

        connected_port_show = set_port_connected('E5', 'W8',
                                                 PORT_SHOW_MATRIX_Q)
        connected_port_show = set_port_connected('E6', 'W7',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E133', 'W136',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E134', 'W135',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E7', 'W6',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E8', 'W5',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E135', 'W134',
                                                 connected_port_show)
        connected_port_show = set_port_connected('E136', 'W133',
                                                 connected_port_show)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q),
            Command(
                'connection create Q3 to Q4',
                '''ROME[TECH]# connection create Q3 to Q4
OK - request added to pending queue (Q3-Q4)
ROME[TECH]# 08-06-2019 09:01 CONNECTING...
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E5[1AE5]<->W8[1AW8] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E6[1AE5]<->W7[1AW7] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E133[1BE133]<->W136[1BW136] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E134[1BE134]<->W135[1BW135] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E7[1AE7]<->W6[1AW6] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E8[1AE8]<->W5[1AW5] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E135[1AB135]<->W134[1BW134] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E136[1AB136]<->W133[1BW133] OP:connect
08-06-2019 09:01 Connection Q3<->Q4 completed successfully
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', connected_port_show),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_bidi(src_port, dst_port)

        emu.check_calls()
    def test_map_bidi_failed(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/003'.format(address)
        dst_port = '{}/1/004'.format(address)
        self.driver_commands._mapping_check_delay = 0.1

        connected_port_show_a = set_port_connected('E3', 'W4',
                                                   PORT_SHOW_MATRIX_A)
        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_A),
            Command(
                'connection create A3 to A4',
                '''ROME[TECH]# connection create A3 to A4
OK - request added to pending queue (A3-A4)
ROME[TECH]# 08-06-2019 09:01 CONNECTING...
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E3[1AE3]<->W4[1AW4] OP:connect
08-06-2019 09:01 CONNECTION OPERATION FAILED:E4[1AE2]<->W3[1AW3] OP:connect
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', connected_port_show_a),
            Command(
                'connection disconnect A3 from A4',
                '''ROME[TECH]# connection disconnect A3 from A4
OK - request added to pending queue (A3-A4)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E3[1AE3]<->W4[1AW4] OP:disconnect
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)

        with self.assertRaisesRegexp(ConnectionPortsError,
                                     'Cannot connect port A3 to port A4'):
            self.driver_commands.map_bidi(src_port, dst_port)

        emu.check_calls()
    def test_map_uni_for_matrix_q(self):
        host = '192.168.122.10'
        address = '{}:Q'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/03'.format(address)
        dst_ports = ['{}/1/04'.format(address)]

        emu = CliEmulator()
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)

        with self.assertRaisesRegexp(NotSupportedError,
                                     "MapUni for matrix Q doesn't supported"):
            self.driver_commands.map_uni(src_port, dst_ports)

        emu.check_calls()
    def test_map_bidi_with_connected_ports(self):
        host = '192.168.122.10'
        address = '{}:B'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/249'.format(address)
        dst_port = '{}/1/253'.format(address)

        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_B),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        self.driver_commands.map_bidi(src_port, dst_port)

        emu.check_calls()
    def test_map_uni_with_a_few_dst_ports(self):
        host = '192.168.122.10'
        address = '{}:B'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/010'.format(address)
        dst_ports = [
            '{}/1/{}'.format(address, port_num) for port_num in (12, 14, 16)
        ]

        emu = CliEmulator()
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)

        with self.assertRaisesRegexp(
                BaseRomeException,
                r'(?i)is not allowed for multiple dst ports'):
            self.driver_commands.map_uni(src_port, dst_ports)

        emu.check_calls()
Example #11
0
    def test_autoload_matrix_q_choosed_another_matrix(self):
        host = "192.168.122.10"
        address = "{}:A".format(host)
        user = "******"
        password = "******"

        emu = CliEmulator([
            Command("", DEFAULT_PROMPT),
            Command(
                "port show",
                PORT_SHOW_MATRIX_Q,
            ),
            Command("show board", SHOW_BOARD),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        with self.assertRaisesRegexp(BaseRomeException,
                                     r"You should specify MatrixQ"):
            self.driver_commands.get_resource_description(address)

        emu.check_calls()
    def test_map_uni_failed(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        src_port = '{}/1/006'.format(address)
        dst_ports = ['{}/1/004'.format(address)]

        self.driver_commands._mapping_timeout = 0.1
        self.driver_commands._mapping_check_delay = 0.1

        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_A),
            Command(
                'connection create E6 to W4', '''ROME[TECH]# 08-05-2019 09:32 
Ports details:
[E6[1AE6]] [W4[1AW4]]
08-05-2019 09:32 OPERATION VALIDATION FAILED:E6-W4 requestType=connect

ROME[TECH]# 
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', PORT_SHOW_MATRIX_A),
        ])

        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)

        with self.assertRaisesRegexp(ConnectionPortsError,
                                     'Cannot connect port A6 to port A4'):
            self.driver_commands.map_uni(src_port, dst_ports)

        emu.check_calls()
Example #13
0
    def test_autoload_matrix_xy_changed_port(self):
        host = "192.168.122.10"
        address = "{}:XY".format(host)
        user = "******"
        password = "******"
        expected_ports_str_range = [str(i).zfill(3) for i in range(1, 129)]

        emu = CliEmulator([
            Command("", DEFAULT_PROMPT),
            Command(
                "port show",
                PORT_SHOW_MATRIX_XY_CHANGED_PORT,
            ),
            Command("show board", SHOW_BOARD),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        info = self.driver_commands.get_resource_description(address)

        # One chassis
        self.assertIsNotNone(info)
        self.assertEqual(1, len(info.resource_info_list))
        chassis = info.resource_info_list[0]
        self.assertIsInstance(chassis, Chassis)
        self.assertEqual("9727-4733-2222", chassis.serial_number)
        self.assertEqual("Rome Chassis", chassis.model_name)
        self.assertEqual(address, chassis.address)
        self.assertEqual(2, len(chassis.child_resources))

        # blade X
        blade_x = chassis.child_resources["X"]
        self.assertIsInstance(blade_x, Blade)
        self.assertEqual("Rome Matrix X", blade_x.model_name)
        self.assertEqual("NA", blade_x.serial_number)
        self.assertEqual("Blade X", blade_x.name)
        self.assertEqual(address + "/X", blade_x.address)
        self.assertEqual(128, len(blade_x.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade_x.child_resources.keys(),
        )
        self.assertItemsEqual(
            map("Port X{}".format, expected_ports_str_range),
            (port.name for port in blade_x.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + "/X/{}").format, expected_ports_str_range),
            (port.address for port in blade_x.child_resources.values()),
        )

        # blade Y
        blade_y = chassis.child_resources["Y"]
        self.assertIsInstance(blade_y, Blade)
        self.assertEqual("Rome Matrix Y", blade_y.model_name)
        self.assertEqual("NA", blade_y.serial_number)
        self.assertEqual("Blade Y", blade_y.name)
        self.assertEqual(address + "/Y", blade_y.address)
        self.assertEqual(128, len(blade_y.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade_y.child_resources.keys(),
        )
        self.assertItemsEqual(
            map("Port Y{}".format, expected_ports_str_range),
            (port.name for port in blade_y.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + "/Y/{}").format, expected_ports_str_range),
            (port.address for port in blade_y.child_resources.values()),
        )

        connected_ports = []
        for port_id, port in chain(blade_x.child_resources.items(),
                                   blade_y.child_resources.items()):
            self.assertIsInstance(port, Port)
            blade_letter = port.name.split(" ", 1)[1][0]
            self.assertIn(blade_letter, "XY")
            self.assertEqual(
                "Port {}{}".format(blade_letter, port.resource_id), port.name)
            if port.mapping:
                connected_ports.append(port)

        self.assertEqual(7, len(connected_ports))
        self.assertDictEqual(
            {
                "Port X001": "Port Y001",
                "Port Y001": "Port X001",
                "Port X002": "Port Y002",
                "Port Y002": "Port X002",
                "Port X004": "Port Y004",
                "Port Y004": "Port X004",
                "Port Y007": "Port X007",
            },
            {p.name: p.mapping.name
             for p in connected_ports},
        )

        emu.check_calls()
Example #14
0
    def test_autoload_matrix_q128_changed_ports(self):
        first_host = "192.168.122.10"
        second_host = "192.168.122.11"
        address = "{first_host}:{second_host}:q".format(**locals())
        user = "******"
        password = "******"
        expected_ports_str_range = [str(i).zfill(3) for i in range(1, 129)]

        emu1 = CliEmulator([
            Command("", DEFAULT_PROMPT),
            Command(
                "port show",
                PORT_SHOW_MATRIX_Q128_1,
            ),
            Command("show board", SHOW_BOARD),
        ], )
        emu2 = CliEmulator([
            Command("", DEFAULT_PROMPT),
            Command(
                "port show",
                PORT_SHOW_MATRIX_Q128_2_CHANGED_PORT,
            ),
            Command("show board", SHOW_BOARD),
        ])

        self.send_line_func_map.update({
            first_host: emu1.send_line,
            second_host: emu2.send_line
        })
        self.receive_all_func_map.update({
            first_host: emu1.receive_all,
            second_host: emu2.receive_all
        })
        with self.patch_sessions():
            self.driver_commands.login(address, user, password)

        info = self.driver_commands.get_resource_description(address)

        self.assertIsNotNone(info)
        self.assertEqual(1, len(info.resource_info_list))

        chassis = info.resource_info_list[0]
        self.assertIsInstance(chassis, Chassis)
        self.assertEqual("9727-4733-2222", chassis.serial_number)
        self.assertEqual("Rome Chassis", chassis.model_name)
        self.assertEqual(address, chassis.address)
        self.assertEqual(1, len(chassis.child_resources))

        blade = chassis.child_resources.values()[0]
        self.assertIsInstance(blade, Blade)
        self.assertEqual("Rome Matrix Q", blade.model_name)
        self.assertEqual("NA", blade.serial_number)
        self.assertEqual("Blade Q", blade.name)
        self.assertEqual(address + "/Q", blade.address)
        self.assertEqual(128, len(blade.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade.child_resources.keys(),
        )
        self.assertItemsEqual(
            map("Port Q{}".format, expected_ports_str_range),
            (port.name for port in blade.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + "/Q/{}").format, expected_ports_str_range),
            (port.address for port in blade.child_resources.values()),
        )

        connected_ports = []
        for port_id, port in blade.child_resources.items():
            self.assertIsInstance(port, Port)
            self.assertEqual("Port Q{}".format(port.resource_id), port.name)
            if port.mapping:
                connected_ports.append(port)

        self.assertEqual(2, len(connected_ports))
        self.assertDictEqual(
            {
                "Port Q001": "Port Q002",
                "Port Q002": "Port Q001"
            },
            {p.name: p.mapping.name
             for p in connected_ports},
        )

        emu1.check_calls()
        emu2.check_calls()
Example #15
0
    def test_autoload_matrix_b(self):
        host = "192.168.122.10"
        address = "{}:B".format(host)
        user = "******"
        password = "******"
        expected_ports_str_range = [str(i).zfill(3) for i in range(129, 257)]

        emu = CliEmulator([
            Command("", DEFAULT_PROMPT),
            Command(
                "port show",
                PORT_SHOW_MATRIX_B,
            ),
            Command("show board", SHOW_BOARD),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        info = self.driver_commands.get_resource_description(address)

        self.assertIsNotNone(info)
        self.assertEqual(1, len(info.resource_info_list))

        chassis = info.resource_info_list[0]
        self.assertIsInstance(chassis, Chassis)
        self.assertEqual("9727-4733-2222", chassis.serial_number)
        self.assertEqual("Rome Chassis", chassis.model_name)
        self.assertEqual(address, chassis.address)
        self.assertEqual(1, len(chassis.child_resources))

        blade = chassis.child_resources.values()[0]
        self.assertIsInstance(blade, Blade)
        self.assertEqual("Rome Matrix B", blade.model_name)
        self.assertEqual("NA", blade.serial_number)
        self.assertEqual("Blade B", blade.name)
        self.assertEqual(address + "/B", blade.address)
        self.assertEqual(128, len(blade.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade.child_resources.keys(),
        )
        self.assertItemsEqual(
            map("Port B{}".format, expected_ports_str_range),
            (port.name for port in blade.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + "/B/{}").format, expected_ports_str_range),
            (port.address for port in blade.child_resources.values()),
        )

        connected_ports = []
        for port_id, port in blade.child_resources.items():
            self.assertIsInstance(port, Port)
            self.assertEqual("Port B{}".format(port.resource_id), port.name)
            if port.mapping:
                connected_ports.append(port)

        self.assertEqual(3, len(connected_ports))
        self.assertDictEqual(
            {
                "Port B247": "Port B246",
                "Port B249": "Port B253",
                "Port B253": "Port B249",
            },
            {p.name: p.mapping.name
             for p in connected_ports},
        )

        emu.check_calls()
Example #16
0
    def test_autoload_matrix_a(self):
        host = '192.168.122.10'
        address = '{}:A'.format(host)
        user = '******'
        password = '******'
        expected_ports_str_range = [str(i).zfill(3) for i in range(1, 129)]

        emu = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command(
                'port show',
                PORT_SHOW_MATRIX_A,
            ),
            Command('show board', SHOW_BOARD),
        ])
        self.send_line_func_map[host] = emu.send_line
        self.receive_all_func_map[host] = emu.receive_all

        self.driver_commands.login(address, user, password)
        info = self.driver_commands.get_resource_description(address)

        self.assertIsNotNone(info)
        self.assertEqual(1, len(info.resource_info_list))

        chassis = info.resource_info_list[0]
        self.assertIsInstance(chassis, Chassis)
        self.assertEqual('9727-4733-2222', chassis.serial_number)
        self.assertEqual('Rome Chassis', chassis.model_name)
        self.assertEqual(address, chassis.address)
        self.assertEqual(1, len(chassis.child_resources))

        blade = chassis.child_resources.values()[0]
        self.assertIsInstance(blade, Blade)
        self.assertEqual('Rome Matrix A', blade.model_name)
        self.assertEqual('NA', blade.serial_number)
        self.assertEqual('Blade A', blade.name)
        self.assertEqual(address + '/A', blade.address)
        self.assertEqual(128, len(blade.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade.child_resources.keys(),
        )
        self.assertItemsEqual(
            map('Port A{}'.format, expected_ports_str_range),
            (port.name for port in blade.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + '/A/{}').format, expected_ports_str_range),
            (port.address for port in blade.child_resources.values()),
        )

        connected_ports = []
        for port_id, port in blade.child_resources.items():
            self.assertIsInstance(port, Port)
            self.assertEqual('Port A{}'.format(port.resource_id), port.name)
            if port.mapping:
                connected_ports.append(port)

        self.assertEqual(len(connected_ports), 1)
        self.assertDictEqual(
            {'Port A002': 'Port A001'},
            {p.name: p.mapping.name
             for p in connected_ports},
        )

        emu.check_calls()
Example #17
0
    def test_autoload_matrix_q128(self):
        first_host = '192.168.122.10'
        second_host = '192.168.122.11'
        address = '{first_host}:{second_host}:q'.format(**locals())
        user = '******'
        password = '******'
        expected_ports_str_range = [str(i).zfill(3) for i in range(1, 129)]

        emu1 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command(
                'port show',
                PORT_SHOW_MATRIX_Q128_1,
            ),
            Command('show board', SHOW_BOARD),
        ], )
        emu2 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command(
                'port show',
                PORT_SHOW_MATRIX_Q128_2,
            ),
            Command('show board', SHOW_BOARD),
        ])

        self.send_line_func_map.update({
            first_host: emu1.send_line,
            second_host: emu2.send_line
        })
        self.receive_all_func_map.update({
            first_host: emu1.receive_all,
            second_host: emu2.receive_all
        })
        with self.patch_sessions():
            self.driver_commands.login(address, user, password)

        info = self.driver_commands.get_resource_description(address)

        self.assertIsNotNone(info)
        self.assertEqual(1, len(info.resource_info_list))

        chassis = info.resource_info_list[0]
        self.assertIsInstance(chassis, Chassis)
        self.assertEqual('9727-4733-2222', chassis.serial_number)
        self.assertEqual('Rome Chassis', chassis.model_name)
        self.assertEqual(address, chassis.address)
        self.assertEqual(1, len(chassis.child_resources))

        blade = chassis.child_resources.values()[0]
        self.assertIsInstance(blade, Blade)
        self.assertEqual('Rome Matrix Q', blade.model_name)
        self.assertEqual('NA', blade.serial_number)
        self.assertEqual('Blade Q', blade.name)
        self.assertEqual(address + '/Q', blade.address)
        self.assertEqual(128, len(blade.child_resources))
        self.assertItemsEqual(
            expected_ports_str_range,
            blade.child_resources.keys(),
        )
        self.assertItemsEqual(
            map('Port Q{}'.format, expected_ports_str_range),
            (port.name for port in blade.child_resources.values()),
        )
        self.assertItemsEqual(
            map((address + '/Q/{}').format, expected_ports_str_range),
            (port.address for port in blade.child_resources.values()),
        )

        connected_ports = []
        for port_id, port in blade.child_resources.items():
            self.assertIsInstance(port, Port)
            self.assertEqual('Port Q{}'.format(port.resource_id), port.name)
            if port.mapping:
                connected_ports.append(port)

        self.assertEqual(2, len(connected_ports))
        self.assertDictEqual(
            {
                'Port Q001': 'Port Q002',
                'Port Q002': 'Port Q001',
            },
            {p.name: p.mapping.name
             for p in connected_ports},
        )

        emu1.check_calls()
        emu2.check_calls()
    def test_map_clear_matrix_q128(self):
        first_host = '192.168.122.10'
        second_host = '192.168.122.11'
        address = '{}:{}:Q'.format(first_host, second_host)
        user = '******'
        password = '******'
        ports = ['{}/1/1'.format(address)]
        self.driver_commands._mapping_check_delay = 0.1

        ports_show_1 = set_port_disconnected('E1', PORT_SHOW_MATRIX_Q128_1)
        ports_show_1 = set_port_disconnected('E2', ports_show_1)
        ports_show_1 = set_port_disconnected('E129', ports_show_1)
        ports_show_1 = set_port_disconnected('E130', ports_show_1)

        ports_show_2 = set_port_disconnected('E1', PORT_SHOW_MATRIX_Q128_2)
        ports_show_2 = set_port_disconnected('E2', ports_show_2)
        ports_show_2 = set_port_disconnected('E129', ports_show_2)
        ports_show_2 = set_port_disconnected('E130', ports_show_2)
        emu1 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q128_1),
            Command(
                'connection disconnect E1 from W2',
                '''ROME[TECH]# connection disconnect E1 from W2
OK - request added to pending queue (E1-W2)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E1[1AE1]<->W2[1AW2] OP:disconnect
''',
            ),
            Command(
                'connection disconnect E129 from W130',
                '''ROME[TECH]# connection disconnect E129 from W130
OK - request added to pending queue (E129-W130)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E129[1BE129]<->W130[1BW130] OP:disconnect
''',
            ),
            Command(
                'connection disconnect E130 from W129',
                '''ROME[TECH]# connection disconnect E130 from W129
OK - request added to pending queue (E130-W129)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E130[1BE130]<->W129[1BW129] OP:disconnect
'''),
            Command(
                'connection disconnect E2 from W1',
                '''ROME[TECH]# connection disconnect E2 from W1
OK - request added to pending queue (E2-W1)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E2[1AE2]<->W1[1AW1] OP:disconnect
''',
            ),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', ports_show_1),
        ])
        emu2 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q128_2),
            Command(
                'connection disconnect E1 from W2',
                '''ROME[TECH]# connection disconnect E1 from W2
OK - request added to pending queue (E1-W2)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E1[1AE1]<->W2[1AW2] OP:disconnect
''',
            ),
            Command(
                'connection disconnect E129 from W130',
                '''ROME[TECH]# connection disconnect E129 from W130
OK - request added to pending queue (E129-W130)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E129[1BE129]<->W130[1BW130] OP:disconnect
''',
            ),
            Command(
                'connection disconnect E130 from W129',
                '''ROME[TECH]# connection disconnect E130 from W129
OK - request added to pending queue (E130-W129)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E130[1BE130]<->W129[1BW129] OP:disconnect
'''),
            Command(
                'connection disconnect E2 from W1',
                '''ROME[TECH]# connection disconnect E2 from W1
OK - request added to pending queue (E2-W1)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E2[1AE2]<->W1[1AW1] OP:disconnect
''',
            ),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', ports_show_2),
        ])

        self.send_line_func_map.update({
            first_host: emu1.send_line,
            second_host: emu2.send_line
        })
        self.receive_all_func_map.update({
            first_host: emu1.receive_all,
            second_host: emu2.receive_all
        })

        with self.patch_sessions():
            self.driver_commands.login(address, user, password)

        self.driver_commands.map_clear(ports)

        emu1.check_calls()
        emu2.check_calls()
    def test_map_bidi_q128_failed(self):
        first_host = '192.168.122.10'
        second_host = '192.168.122.11'
        address = '{}:{}:Q'.format(first_host, second_host)
        user = '******'
        password = '******'
        src_port = '{}/1/003'.format(address)
        dst_port = '{}/1/004'.format(address)
        self.driver_commands._mapping_check_delay = 0.1

        port_show_q1 = set_port_connected('E3', 'W4', PORT_SHOW_MATRIX_Q128_1)
        port_show_q1 = set_port_connected('E131', 'W132', port_show_q1)
        port_show_q1 = set_port_connected('E4', 'W3', port_show_q1)
        port_show_q1 = set_port_connected('E132', 'W131', port_show_q1)

        emu1 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q128_1),
            Command(
                'connection create P3 to P4',
                '''ROME[TECH]# connection create P3 to P4
OK - request added to pending queue (P3-P4)
ROME[TECH]# 08-06-2019 09:01 CONNECTING...
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E3[1AE3]<->W4[1AW4] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E131[1BE131]<->W132[1BW132] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E4[1AE4]<->W3[1AW3] OP:connect
08-06-2019 09:01 CONNECTION OPERATION SUCCEEDED:E132[1BE132]<->W131[1BW131] OP:connect
08-06-2019 09:01 Connection P3<->P4 completed successfully
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', port_show_q1),
            Command(
                'connection disconnect P3 from P4',
                '''ROME[TECH]# connection disconnect E1 from W2
OK - request added to pending queue (E1-W2)
ROME[TECH]# 08-05-2019 12:19 DISCONNECTING...
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E1[1AE1]<->W2[1AW2] OP:disconnect
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E129[1BE129]<->W130[1BW130] OP:disconnect
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E130[1BE130]<->W129[1BW129] OP:disconnect
08-05-2019 12:19 CONNECTION OPERATION SUCCEEDED:E2[1AE2]<->W1[1AW1] OP:disconnect
'''),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
        ])
        emu2 = CliEmulator([
            Command('', DEFAULT_PROMPT),
            Command('port show', PORT_SHOW_MATRIX_Q128_2),
            Command('connection create P3 to P4', DEFAULT_PROMPT),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
            Command('port show', PORT_SHOW_MATRIX_Q128_2),
            Command('connection disconnect P3 from P4', DEFAULT_PROMPT),
            Command('connection show pending', CONNECTION_PENDING_EMPTY),
        ])
        self.send_line_func_map.update({
            first_host: emu1.send_line,
            second_host: emu2.send_line
        })
        self.receive_all_func_map.update({
            first_host: emu1.receive_all,
            second_host: emu2.receive_all
        })

        with self.patch_sessions():
            self.driver_commands.login(address, user, password)

        with self.assertRaisesRegexp(ConnectionPortsError,
                                     'Cannot connect port P3 to port P4'):
            self.driver_commands.map_bidi(src_port, dst_port)

        emu1.check_calls()
        emu2.check_calls()