Skip to content

Commit

Permalink
Merge pull request #75 from arista-eosplus/feature-system-update
Browse files Browse the repository at this point in the history
Adding enable ip routing to eos system
  • Loading branch information
devrobo committed Nov 18, 2015
2 parents a900a38 + e1e667f commit d09922b
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 4 deletions.
21 changes: 21 additions & 0 deletions lib/rbeapi/api/system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class System < Entity
def get
response = {}
response.merge!(parse_hostname(config))
response.merge!(parse_iprouting(config))
response
end

Expand All @@ -62,6 +63,11 @@ def parse_hostname(config)
{ hostname: mdata.nil? ? '' : mdata[1] }
end

def parse_iprouting(config)
mdata = /no\sip\srouting/.match(config)
{ iprouting: mdata.nil? ? true : false }
end

##
# Configures the system hostname value in the running-config
#
Expand All @@ -76,6 +82,21 @@ def set_hostname(opts = {})
cmd = command_builder('hostname', opts)
configure(cmd)
end

##
# Configures the state of global ip routing
#
# @param [Hash] opts The configuration parameters
# @option :opts [Boolean] :enable True if ip routing should be enabled
# or False if ip routing should be disabled. Default is true.
# @option opts [Boolean] :default Controls the use of the default
# keyword. Default is false.
#
# @return [Boolean] returns true if the command completed successfully
def set_iprouting(opts = {})
cmd = command_builder('ip routing', opts)
configure(cmd)
end
end
end
end
48 changes: 44 additions & 4 deletions spec/system/rbeapi/api/system_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@

describe '#get' do
let(:entity) do
{ hostname: 'localhost' }
{ hostname: 'localhost', iprouting: true }
end

before { node.config('hostname localhost') }
before { node.config(['hostname localhost', 'ip routing']) }

it 'returns the snmp resource' do
expect(subject.get).to eq(entity)
end
end

describe '#set_system' do
before { node.config('hostname localhost') }
describe '#set_hostname' do
before { node.config(['hostname localhost']) }

it 'configures the system hostname value' do
expect(subject.get[:hostname]).to eq('localhost')
Expand All @@ -47,5 +47,45 @@
expect(subject.set_hostname(default: true)).to be_truthy
expect(subject.get[:hostname]).to be_empty
end

it 'configures the system hostname value' do
expect(subject.get[:iprouting]).to eq(true)
expect(subject.set_iprouting(enable: true)).to be_truthy
expect(subject.get[:iprouting]).to eq(true)
end
end

describe '#set_iprouting' do
describe 'negates ip routing' do
before { node.config(['ip routing']) }

it 'negates ip routing' do
expect(subject.get[:iprouting]).to eq(true)
expect(subject.set_iprouting(enable: false)).to be_truthy
expect(subject.get[:iprouting]).to eq(false)
end

it 'defaults ip routing' do
expect(subject.get[:iprouting]).to eq(true)
expect(subject.set_iprouting(default: true)).to be_truthy
expect(subject.get[:iprouting]).to eq(false)
end
end

describe 'enables ip routing' do
before { node.config(['no ip routing']) }

it 'negates ip routing' do
expect(subject.get[:iprouting]).to eq(false)
expect(subject.set_iprouting(enable: true)).to be_truthy
expect(subject.get[:iprouting]).to eq(true)
end

it 'defaults ip routing' do
expect(subject.get[:iprouting]).to eq(false)
expect(subject.set_iprouting(default: false)).to be_truthy
expect(subject.get[:iprouting]).to eq(true)
end
end
end
end
102 changes: 102 additions & 0 deletions spec/unit/rbeapi/api/system/default_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#
# Copyright (c) 2015, Arista Networks, Inc.
# 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 Arista Networks 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 ARISTA NETWORKS
# 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.
#
require 'spec_helper'

require 'rbeapi/api/system'

include FixtureHelpers

describe Rbeapi::Api::System do
subject { described_class.new(node) }

let(:node) { double('node') }

let(:test) do
{ hostname: 'localhost', iprouting: true }
end

def system
system = Fixtures[:system]
return system if system
fixture('system', format: :text, dir: File.dirname(__FILE__))
end

before :each do
allow(subject.node).to receive(:running_config).and_return(system)
end

describe '#get' do
it 'returns the username collection' do
expect(subject.get).to include(test)
end

it 'returns a hash collection' do
expect(subject.get).to be_a_kind_of(Hash)
end

it 'has two entries' do
expect(subject.get.size).to eq(2)
end
end

describe '#set_hostname' do
it 'sets the hostname' do
expect(node).to receive(:config).with('hostname localhost')
expect(subject.set_hostname(value: 'localhost')).to be_truthy
expect(subject.get[:hostname]).to eq('localhost')
end
end

describe '#set_iprouting' do
it 'sets ip routing default true' do
expect(node).to receive(:config).with('default ip routing')
expect(subject.set_iprouting(default: true)).to be_truthy
end

it 'sets ip routing default false' do
expect(node).to receive(:config).with('ip routing')
expect(subject.set_iprouting(default: false)).to be_truthy
expect(subject.get[:iprouting]).to eq(true)
end

it 'sets ip routing enable true' do
expect(node).to receive(:config).with('ip routing')
expect(subject.set_iprouting(enable: true)).to be_truthy
expect(subject.get[:iprouting]).to eq(true)
end

it 'sets ip routing enable false' do
expect(node).to receive(:config).with('no ip routing')
expect(subject.set_iprouting(enable: false)).to be_truthy
end
end
end
2 changes: 2 additions & 0 deletions spec/unit/rbeapi/api/system/fixture_system.text
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
hostname localhost
ip routing

0 comments on commit d09922b

Please sign in to comment.