Add support for ACS 5K/6K/8K terminal servers in Layer1::Cyclades requires new MIBs Layer1::Cyclades test class
		
			
				
	
	
		
			611 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			611 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
# Test::SNMP::Info::Layer1::Cyclades
 | 
						|
#
 | 
						|
# Copyright (c) 2018 Eric Miller
 | 
						|
# All rights reserved.
 | 
						|
#
 | 
						|
# Redistribution and use in source and binary forms, with or without
 | 
						|
# modification, are permitted provided that the following conditions are met:
 | 
						|
#
 | 
						|
#     * Redistributions of source code must retain the above copyright notice,
 | 
						|
#       this list of conditions and the following disclaimer.
 | 
						|
#     * Redistributions in binary form must reproduce the above copyright
 | 
						|
#       notice, this list of conditions and the following disclaimer in the
 | 
						|
#       documentation and/or other materials provided with the distribution.
 | 
						|
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
						|
#       names of its contributors may be used to endorse or promote products
 | 
						|
#       derived from this software without specific prior written permission.
 | 
						|
#
 | 
						|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
						|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
						|
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
						|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
						|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
						|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
						|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
						|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
						|
# POSSIBILITY OF SUCH DAMAGE.
 | 
						|
 | 
						|
package Test::SNMP::Info::Layer1::Cyclades;
 | 
						|
 | 
						|
use Test::Class::Most parent => 'My::Test::Class';
 | 
						|
 | 
						|
use SNMP::Info::Layer1::Cyclades;
 | 
						|
 | 
						|
sub setup : Tests(setup) {
 | 
						|
    my $test = shift;
 | 
						|
    $test->SUPER::setup;
 | 
						|
 | 
						|
    my $phy_addr = pack( "H*", '0000944037B3' );
 | 
						|
 | 
						|
  # Start with a common cache that will serve most tests
 | 
						|
  # Just define all alternatives to start with and alternatives in sequence to
 | 
						|
  # test short circuits, we can verify conditional coverage with Devel::Cover
 | 
						|
    my $cache_data = {
 | 
						|
        '_layers'      => 1,
 | 
						|
        '_description' => 'My Bogus ACS6008 Description',
 | 
						|
 | 
						|
        # ACS-MIB::acs6008
 | 
						|
        '_id' => '.1.3.6.1.4.1.10418.16.1.5',
 | 
						|
 | 
						|
        '_acs_os_ver'        => '6.00',
 | 
						|
        '_acs8k_os_ver'      => '8.00',
 | 
						|
        '_cy5k_os_ver'       => '2.02',
 | 
						|
        '_cy_os_ver'         => '3.00',
 | 
						|
        '_acs_model'         => 'ACS6032',
 | 
						|
        '_acs8k_model'       => 'ACS8032',
 | 
						|
        '_cy5k_model'        => 'ACS5024',
 | 
						|
        '_cy_model'          => 'TS3000',
 | 
						|
        '_acs_serial'        => 'ABC6000',
 | 
						|
        '_acs8k_serial'      => 'ABC8000',
 | 
						|
        '_cy5k_serial'       => 'ABC5000',
 | 
						|
        '_cy_serial'         => 'ABC3000',
 | 
						|
        '_acs_ps1_status'    => 'statePowerOn',
 | 
						|
        '_acs8k_ps1_status'  => 'statePowerOff',
 | 
						|
        '_cy5k_ps1_status'   => 'powerOFF',
 | 
						|
        '_cy_ps1_status'     => 'powerON',
 | 
						|
        '_acs_ps2_status'    => 'powerNotInstaled',
 | 
						|
        '_acs8k_ps2_status'  => 'statePowerOn',
 | 
						|
        '_cy5k_ps2_status'   => 'powerON',
 | 
						|
        '_cy_ps2_status'     => 'noinstalled',
 | 
						|
        '_cy5k_root_ip'      => '2.3.4.5',
 | 
						|
        '_cy_root_ip'        => '1.2.3.4',
 | 
						|
        '_acs_port_tty'      => 1,
 | 
						|
        '_acs8k_port_tty'    => 1,
 | 
						|
        '_cy5k_port_tty'     => 1,
 | 
						|
        '_cy_port_tty'       => 1,
 | 
						|
        '_acs_port_name'     => 1,
 | 
						|
        '_acs8k_port_name'   => 1,
 | 
						|
        '_cy5k_port_name'    => 1,
 | 
						|
        '_cy_port_name'      => 1,
 | 
						|
        '_acs_port_speed'    => 1,
 | 
						|
        '_acs8k_port_speed'  => 1,
 | 
						|
        '_cy5k_port_speed'   => 1,
 | 
						|
        '_cy_port_speed'     => 1,
 | 
						|
        '_acs_port_cd'       => 1,
 | 
						|
        '_acs8k_port_cd'     => 1,
 | 
						|
        '_cy5k_port_cd'      => 1,
 | 
						|
        '_cy_port_cd'        => 1,
 | 
						|
        '_acs_port_socket'   => 1,
 | 
						|
        '_acs8k_port_socket' => 1,
 | 
						|
        '_cy5k_port_socket'  => 1,
 | 
						|
        '_cy_port_socket'    => 1,
 | 
						|
        '_i_index'           => 1,
 | 
						|
        '_i_description'     => 1,
 | 
						|
        '_i_speed'           => 1,
 | 
						|
        '_i_up'              => 1,
 | 
						|
        '_i_name'            => 1,
 | 
						|
 | 
						|
        'store' => {
 | 
						|
            'i_index'           => { 1 => 1 },
 | 
						|
            'i_speed'           => { 1 => 10000000 },
 | 
						|
            'i_description'     => { 1 => 'Interface 1 Description' },
 | 
						|
            'i_name'            => { 1 => 'Interface 1 Name' },
 | 
						|
            'i_up'              => { 1 => 'up' },
 | 
						|
            'acs_port_socket'   => { 1 => 'ACS 1 Name', 2 => 'ACS 2 Name' },
 | 
						|
            'acs8k_port_socket' => { 1 => '8K 1 Name', 2 => '8K 2 Name' },
 | 
						|
            'cy5k_port_socket'  => { 1 => '5K 1 Sock', 2 => '5K 2 Sock' },
 | 
						|
            'cy_port_socket'    => { 1 => 'Port 1 Sock', 2 => 'Port 2 Sock' },
 | 
						|
            'acs_port_tty'      => { 1 => 'ACS 1 TTY', 2 => 'ACS 2 TTY' },
 | 
						|
            'acs8k_port_tty'    => { 1 => '8K 1 TTY', 2 => '8K 2 TTY' },
 | 
						|
            'cy5k_port_tty'     => { 1 => '5K 1 TTY', 2 => '5K 2 TTY' },
 | 
						|
            'cy_port_tty'       => { 1 => 'Port 1 TTY', 2 => 'Port 2 TTY' },
 | 
						|
            'acs_port_name'     => { 1 => 'ACS 1 Name', 2 => 'ACS 2 Name' },
 | 
						|
            'acs8k_port_name'   => { 1 => '8K 1 Name', 2 => '8K 2 Name' },
 | 
						|
            'cy5k_port_name'    => { 1 => '5K 1 Name', 2 => '5K 2 Name' },
 | 
						|
            'cy_port_name'      => { 1 => 'Port 1 Name', 2 => 'Port 2 Name' },
 | 
						|
            'acs_port_speed'    => { 1 => 56000, 2 => 112000 },
 | 
						|
            'acs8k_port_speed'  => { 1 => 112000, 2 => 384000 },
 | 
						|
            'cy5k_port_speed'   => { 1 => 9600, 2 => 56000 },
 | 
						|
            'cy_port_speed'     => { 1 => 2400, 2 => 9600 },
 | 
						|
            'acs_port_cd'       => { 1 => 'down', 2 => 'up' },
 | 
						|
            'acs8k_port_cd'     => { 1 => 'up', 2 => 'down' },
 | 
						|
            'cy5k_port_cd'      => { 1 => 'down', 2 => 'down' },
 | 
						|
            'cy_port_cd'        => { 1 => 'down', 2 => 'up' },
 | 
						|
        }
 | 
						|
    };
 | 
						|
    $test->{info}->cache($cache_data);
 | 
						|
}
 | 
						|
 | 
						|
sub os : Tests(2) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'os' );
 | 
						|
    is( $test->{info}->os(), 'avocent', q(Vendor returns 'avocent') );
 | 
						|
}
 | 
						|
 | 
						|
sub os_ver : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'os_ver' );
 | 
						|
    is( $test->{info}->os_ver(), '6.00', q(ACS version is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_os_ver};
 | 
						|
    is( $test->{info}->os_ver(), '8.00',
 | 
						|
        q(ACS 8K version is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_os_ver};
 | 
						|
    is( $test->{info}->os_ver(), '2.02',
 | 
						|
        q(ACS 5K version is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_os_ver};
 | 
						|
    is( $test->{info}->os_ver(),
 | 
						|
        '3.00', q(Original Cyclades version is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_os_ver};
 | 
						|
    is( $test->{info}->os_ver(),
 | 
						|
        undef, q(No MIB leaf data returns undef os_ver) );
 | 
						|
}
 | 
						|
 | 
						|
sub vendor : Tests(2) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'vendor' );
 | 
						|
    is( $test->{info}->vendor(), 'vertiv', q(Vendor returns 'vertiv') );
 | 
						|
}
 | 
						|
 | 
						|
sub model : Tests(7) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'model' );
 | 
						|
    is( $test->{info}->model(), 'acs6032', q(ACS model is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_model};
 | 
						|
    is( $test->{info}->model(), 'acs8032',
 | 
						|
        q(ACS 8K model is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_model};
 | 
						|
    is( $test->{info}->model(), 'acs5024',
 | 
						|
        q(ACS 5K model is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_model};
 | 
						|
    is( $test->{info}->model(),
 | 
						|
        'ts3000', q(Original Cyclades model is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_model};
 | 
						|
    is( $test->{info}->model(),
 | 
						|
        'acs6008', q(No MIB leaf data returns translated id) );
 | 
						|
 | 
						|
    # We won't get to class without sysObjectID that matches enterprise id,
 | 
						|
    # so use one that isn't defined in MIB
 | 
						|
    $test->{info}{_id} = '.1.3.6.1.4.1.10418.16.1.6';
 | 
						|
    is( $test->{info}->model(),
 | 
						|
        'acsProducts.6',
 | 
						|
        q(Unknown id returns partially translated id) );
 | 
						|
}
 | 
						|
 | 
						|
sub serial : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'serial' );
 | 
						|
    is( $test->{info}->serial(), 'ABC6000', q(ACS serial is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_serial};
 | 
						|
    is( $test->{info}->serial(),
 | 
						|
        'ABC8000', q(ACS 8K serial is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_serial};
 | 
						|
    is( $test->{info}->serial(),
 | 
						|
        'ABC5000', q(ACS 5K serial is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_serial};
 | 
						|
    is( $test->{info}->serial(),
 | 
						|
        'ABC3000', q(Original Cyclades serial is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_serial};
 | 
						|
    is( $test->{info}->serial(),
 | 
						|
        undef, q(No MIB leaf data returns undef serial) );
 | 
						|
}
 | 
						|
 | 
						|
sub root_ip : Tests(4) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'root_ip' );
 | 
						|
    is( $test->{info}->root_ip(),
 | 
						|
        '2.3.4.5', q(ACS 5K root IP is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_root_ip};
 | 
						|
    is( $test->{info}->root_ip(),
 | 
						|
        '1.2.3.4', q(Original Cyclades root IP is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_root_ip};
 | 
						|
    is( $test->{info}->root_ip(),
 | 
						|
        undef, q(No MIB leaf data returns undef root IP) );
 | 
						|
}
 | 
						|
 | 
						|
sub ps1_status : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'ps1_status' );
 | 
						|
    is( $test->{info}->ps1_status(),
 | 
						|
        'statePowerOn', q(ACS power supply 1 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_ps1_status};
 | 
						|
    is( $test->{info}->ps1_status(),
 | 
						|
        'statePowerOff', q(ACS 8K power supply 1 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_ps1_status};
 | 
						|
    is( $test->{info}->ps1_status(),
 | 
						|
        'powerOFF', q(ACS 5K power supply 1 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_ps1_status};
 | 
						|
    is( $test->{info}->ps1_status(),
 | 
						|
        'powerON',
 | 
						|
        q(Original Cyclades power supply 1 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_ps1_status};
 | 
						|
    is( $test->{info}->ps1_status(),
 | 
						|
        undef, q(No MIB leaf data returns undef power supply 1 status) );
 | 
						|
}
 | 
						|
 | 
						|
sub ps2_status : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'ps2_status' );
 | 
						|
    is( $test->{info}->ps2_status(),
 | 
						|
        'powerNotInstaled', q(ACS power supply 2 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_ps2_status};
 | 
						|
    is( $test->{info}->ps2_status(),
 | 
						|
        'statePowerOn', q(ACS 8K power supply 2 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_ps2_status};
 | 
						|
    is( $test->{info}->ps2_status(),
 | 
						|
        'powerON', q(ACS 5K power supply 2 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_ps2_status};
 | 
						|
    is( $test->{info}->ps2_status(),
 | 
						|
        'noinstalled',
 | 
						|
        q(Original Cyclades power supply 2 status is expected value) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy_ps2_status};
 | 
						|
    is( $test->{info}->ps2_status(),
 | 
						|
        undef, q(No MIB leaf data returns undef power supply 2 status) );
 | 
						|
}
 | 
						|
 | 
						|
sub i_index : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'i_index' );
 | 
						|
 | 
						|
    my $expected = {
 | 
						|
        '1'          => '1',
 | 
						|
        'ACS 1 Name' => 'ACS 1 Name',
 | 
						|
        'ACS 2 Name' => 'ACS 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_index(),
 | 
						|
        $expected, q(ACS interface indices have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    $expected = {
 | 
						|
        '1'         => '1',
 | 
						|
        '8K 1 Name' => '8K 1 Name',
 | 
						|
        '8K 2 Name' => '8K 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_index(),
 | 
						|
        $expected, q(ACS 8K interface indices have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    $expected = {
 | 
						|
        '1'         => '1',
 | 
						|
        '5K 1 Sock' => '5K 1 Sock',
 | 
						|
        '5K 2 Sock' => '5K 2 Sock'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_index(),
 | 
						|
        $expected, q(ACS 5K interface indices have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    $expected = {
 | 
						|
        '1'           => '1',
 | 
						|
        'Port 1 Sock' => 'Port 1 Sock',
 | 
						|
        'Port 2 Sock' => 'Port 2 Sock'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_index(),
 | 
						|
        $expected,
 | 
						|
        q(Original Cyclades interface indices have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
sub interfaces : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'interfaces' );
 | 
						|
    my $expected = {
 | 
						|
        '1'          => 'Interface 1 Description',
 | 
						|
        'ACS 1 Name' => 'ACS 1 TTY',
 | 
						|
        'ACS 2 Name' => 'ACS 2 TTY'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        $expected, q(ACS interfaces have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    delete $test->{info}{_acs_port_tty};
 | 
						|
    delete $test->{info}{store}{acs_port_tty};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Description',
 | 
						|
        '8K 1 Name' => '8K 1 TTY',
 | 
						|
        '8K 2 Name' => '8K 2 TTY'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        $expected, q(ACS 8K interfaces have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    delete $test->{info}{_acs8k_port_tty};
 | 
						|
    delete $test->{info}{store}{acs8k_port_tty};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Description',
 | 
						|
        '5K 1 Sock' => '5K 1 TTY',
 | 
						|
        '5K 2 Sock' => '5K 2 TTY'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        $expected, q(ACS 5K interfaces have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    delete $test->{info}{_cy5k_port_tty};
 | 
						|
    delete $test->{info}{store}{cy5k_port_tty};
 | 
						|
    $expected = {
 | 
						|
        '1'           => 'Interface 1 Description',
 | 
						|
        'Port 1 Sock' => 'Port 1 TTY',
 | 
						|
        'Port 2 Sock' => 'Port 2 TTY'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        $expected, q(Original Cyclades interfaces have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->interfaces(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
sub i_speed : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'i_speed' );
 | 
						|
 | 
						|
    # Munge in effect
 | 
						|
    my $expected = {
 | 
						|
        '1'          => '10 Mbps',
 | 
						|
        'ACS 1 Name' => 56000,
 | 
						|
        'ACS 2 Name' => 112000
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_speed(),
 | 
						|
        $expected, q(ACS interface speeds have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    delete $test->{info}{_acs_port_speed};
 | 
						|
    delete $test->{info}{store}{acs_port_speed};
 | 
						|
    $expected = {
 | 
						|
        '1'         => '10 Mbps',
 | 
						|
        '8K 1 Name' => 112000,
 | 
						|
        '8K 2 Name' => 384000
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_speed(),
 | 
						|
        $expected, q(ACS 8K interface speeds have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    delete $test->{info}{_acs8k_port_speed};
 | 
						|
    delete $test->{info}{store}{acs8k_port_speed};
 | 
						|
    $expected = {
 | 
						|
        '1'         => '10 Mbps',
 | 
						|
        '5K 1 Sock' => 9600,
 | 
						|
        '5K 2 Sock' => 56000
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_speed(),
 | 
						|
        $expected, q(ACS 5K interface speeds have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    delete $test->{info}{_cy5k_port_speed};
 | 
						|
    delete $test->{info}{store}{cy5k_port_speed};
 | 
						|
    $expected = {
 | 
						|
        '1'           => '10 Mbps',
 | 
						|
        'Port 1 Sock' => 2400,
 | 
						|
        'Port 2 Sock' => 9600
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_speed(),
 | 
						|
        $expected,
 | 
						|
        q(Original Cyclades interface speeds have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->i_speed(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
sub i_up : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'i_up' );
 | 
						|
 | 
						|
    my $expected = {
 | 
						|
        '1'          => 'up',
 | 
						|
        'ACS 1 Name' => 'down',
 | 
						|
        'ACS 2 Name' => 'up'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_up(),
 | 
						|
        $expected, q(ACS interface statuses have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    delete $test->{info}{_acs_port_cd};
 | 
						|
    delete $test->{info}{store}{acs_port_cd};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'up',
 | 
						|
        '8K 1 Name' => 'up',
 | 
						|
        '8K 2 Name' => 'down'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_up(),
 | 
						|
        $expected, q(ACS 8K interface statuses have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    delete $test->{info}{_acs8k_port_cd};
 | 
						|
    delete $test->{info}{store}{acs8k_port_cd};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'up',
 | 
						|
        '5K 1 Sock' => 'down',
 | 
						|
        '5K 2 Sock' => 'down'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_up(),
 | 
						|
        $expected, q(ACS 5K interface statuses have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    delete $test->{info}{_cy5k_port_cd};
 | 
						|
    delete $test->{info}{store}{cy5k_port_cd};
 | 
						|
    $expected = {
 | 
						|
        '1'           => 'up',
 | 
						|
        'Port 1 Sock' => 'down',
 | 
						|
        'Port 2 Sock' => 'up'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_up(),
 | 
						|
        $expected,
 | 
						|
        q(Original Cyclades interface statuses have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->i_up(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
sub i_description : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'i_description' );
 | 
						|
 | 
						|
    my $expected = {
 | 
						|
        '1'          => 'Interface 1 Description',
 | 
						|
        'ACS 1 Name' => 'ACS 1 Name',
 | 
						|
        'ACS 2 Name' => 'ACS 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_description(),
 | 
						|
        $expected, q(ACS interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    delete $test->{info}{_acs_port_name};
 | 
						|
    delete $test->{info}{store}{acs_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Description',
 | 
						|
        '8K 1 Name' => '8K 1 Name',
 | 
						|
        '8K 2 Name' => '8K 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_description(),
 | 
						|
        $expected, q(ACS 8K interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    delete $test->{info}{_acs8k_port_name};
 | 
						|
    delete $test->{info}{store}{acs8k_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Description',
 | 
						|
        '5K 1 Sock' => '5K 1 Name',
 | 
						|
        '5K 2 Sock' => '5K 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_description(),
 | 
						|
        $expected, q(ACS 5K interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    delete $test->{info}{_cy5k_port_name};
 | 
						|
    delete $test->{info}{store}{cy5k_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'           => 'Interface 1 Description',
 | 
						|
        'Port 1 Sock' => 'Port 1 Name',
 | 
						|
        'Port 2 Sock' => 'Port 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_description(),
 | 
						|
        $expected,
 | 
						|
        q(Original Cyclades interface descriptions have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->i_description(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
sub i_name : Tests(6) {
 | 
						|
    my $test = shift;
 | 
						|
 | 
						|
    can_ok( $test->{info}, 'i_name' );
 | 
						|
 | 
						|
    my $expected = {
 | 
						|
        '1'          => 'Interface 1 Name',
 | 
						|
        'ACS 1 Name' => 'ACS 1 Name',
 | 
						|
        'ACS 2 Name' => 'ACS 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_name(),
 | 
						|
        $expected, q(ACS interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs_port_socket};
 | 
						|
    delete $test->{info}{store}{acs_port_socket};
 | 
						|
    delete $test->{info}{_acs_port_name};
 | 
						|
    delete $test->{info}{store}{acs_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Name',
 | 
						|
        '8K 1 Name' => '8K 1 Name',
 | 
						|
        '8K 2 Name' => '8K 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_name(),
 | 
						|
        $expected, q(ACS 8K interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_acs8k_port_socket};
 | 
						|
    delete $test->{info}{store}{acs8k_port_socket};
 | 
						|
    delete $test->{info}{_acs8k_port_name};
 | 
						|
    delete $test->{info}{store}{acs8k_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'         => 'Interface 1 Name',
 | 
						|
        '5K 1 Sock' => '5K 1 Name',
 | 
						|
        '5K 2 Sock' => '5K 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_name(),
 | 
						|
        $expected, q(ACS 5K interface descriptions have expected values) );
 | 
						|
 | 
						|
    delete $test->{info}{_cy5k_port_socket};
 | 
						|
    delete $test->{info}{store}{cy5k_port_socket};
 | 
						|
    delete $test->{info}{_cy5k_port_name};
 | 
						|
    delete $test->{info}{store}{cy5k_port_name};
 | 
						|
    $expected = {
 | 
						|
        '1'           => 'Interface 1 Name',
 | 
						|
        'Port 1 Sock' => 'Port 1 Name',
 | 
						|
        'Port 2 Sock' => 'Port 2 Name'
 | 
						|
    };
 | 
						|
    cmp_deeply( $test->{info}->i_name(),
 | 
						|
        $expected,
 | 
						|
        q(Original Cyclades interface descriptions have expected values) );
 | 
						|
 | 
						|
    $test->{info}->clear_cache();
 | 
						|
    cmp_deeply( $test->{info}->i_name(),
 | 
						|
        {}, q(Empty SNMP table results in empty hash) );
 | 
						|
}
 | 
						|
 | 
						|
1;
 |