"""
Modified 2015 by ON.Lab

Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
"""

class NEC:

    def __init__( self ):
        self.prompt = '(.*)'
        self.timeout = 60

    def show( self, *options, **def_args ):
        "Possible Options :['  access-filter  ', '  accounting  ', '  acknowledgments  ', '  auto-config  ', '  axrp  ', '  cfm  ', '  channel-group  ', '  clock  ', '  config-lock-status  ', '  cpu  ', '  dhcp  ', '  dot1x  ', '  dumpfile  ', '  efmoam  ', '  environment  ', '  file  ', '  flash  ', '  gsrp  ', '  history  ', '  igmp-snooping  ', '  interfaces  ', '  ip  ', '  ip-dual  ', '  ipv6-dhcp  ', '  license  ', '  lldp  ', '  logging  ', '  loop-detection  ', '  mac-address-table  ', '  mc  ', '  memory  ', '  mld-snooping  ', '  netconf  ', '  netstat  ', '  ntp  ', '  oadp  ', '  openflow  ', '  port  ', '  power  ', '  processes  ', '  qos  ', '  qos-flow  ', '  sessions  ', '  sflow  ', '  spanning-tree  ', '  ssh  ', '  system  ', '  tcpdump  ', '  tech-support  ', '  track  ', '  version  ', '  vlan  ', '  vrrpstatus  ', '  whoami  ']"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute( cmd="show " + arguments, prompt=prompt, timeout=timeout )
        return main.TRUE

    def show_ip( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   ip   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_mc( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   mc   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_cfm( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   cfm   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_ntp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   ntp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_ssh( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   ssh   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_qos( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   qos   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_cpu( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   cpu   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_vlan( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   vlan   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_lldp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   lldp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_dhcp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   dhcp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_axrp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   axrp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_oadp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   oadp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_gsrp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   gsrp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_port( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   port   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_file( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   file   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_power( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   power   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_clock( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   clock   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_dot1x( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   dot1x   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_sflow( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   sflow   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_track( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   track   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_flash( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   flash   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_system( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   system   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_whoami( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   whoami   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_efmoam( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   efmoam   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_memory( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   memory   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_tcpdump( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   tcpdump   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_history( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   history   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_logging( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   logging   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_license( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   license   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_netstat( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   netstat   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_version( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   version   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_netconf( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   netconf   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_ipdual( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   ip-dual   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_sessions( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   sessions   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_qosflow( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   qos-flow   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_openflow( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   openflow   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_dumpfile( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   dumpfile   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_ipv6dhcp( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   ipv6-dhcp   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_processes( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   processes   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_vrrpstatus( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   vrrpstatus   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_interfaces( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   interfaces   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_environment( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   environment   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_autoconfig( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   auto-config   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_techsupport( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   tech-support   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_mldsnooping( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   mld-snooping   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_igmpsnooping( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   igmp-snooping   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_channelgroup( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   channel-group   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_spanningtree( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   spanning-tree   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_loopdetection( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   loop-detection   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_acknowledgments( self, *options, **def_args ):
        "Possible Options :['  interface  ']"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   acknowledgments   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_macaddresstable( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   mac-address-table   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_configlockstatus( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   config-lock-status   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE

    def show_acknowledgments_interface( self, *options, **def_args ):
        "Possible Options :[]"
        arguments = ''
        for option in options:
            arguments = arguments + option + ' '
        prompt = def_args.setdefault( 'prompt', self.prompt )
        timeout = def_args.setdefault( 'timeout', self.timeout )
        self.execute(
            cmd="show   acknowledgments     interface   " +
            arguments,
            prompt=prompt,
            timeout=timeout )
        return main.TRUE
