Skip to content

Commit

Permalink
Merge pull request #37 from yzguy/show_mac_address-table
Browse files Browse the repository at this point in the history
add show mac address-table
  • Loading branch information
cheynearista authored Mar 12, 2020
2 parents fe66bef + f9d7969 commit f5838f8
Show file tree
Hide file tree
Showing 3 changed files with 176 additions and 0 deletions.
76 changes: 76 additions & 0 deletions module/macaddress.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
//
// Copyright (c) 2015-2016, 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.
//

package module

type ShowMACAddressTable struct {
MulticastTable struct {
TableEntries []MACAddressTableEntry `json:"tableEntries"`
} `json:"multicastTable"`
UnicastTable struct {
TableEntries []MACAddressTableEntry `json:"tableEntries"`
} `json:"unicastTable"`
}

type MACAddressTableEntry struct {
MACAddress string
LastMove float64
Interface string
Moves int
EntryType string
VlanID int
}

func (a *ShowMACAddressTable) GetCmd() string {
return "show mac address-table"
}

func (s *ShowEntity) ShowMACAddressTable() (ShowMACAddressTable, error) {
var showmacaddresstable ShowMACAddressTable

handle, err := s.node.GetHandle("json")
if err != nil {
return showmacaddresstable, err
}

err = handle.AddCommand(&showmacaddresstable)
if err != nil {
return showmacaddresstable, err
}

if err := handle.Call(); err != nil {
return showmacaddresstable, err
}

handle.Close()
return showmacaddresstable, nil
}
69 changes: 69 additions & 0 deletions module/macaddress_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package module

import (
"errors"
"testing"

"github.com/aristanetworks/goeapi"
)

func TestShowMACAddressTable_UnitTest(t *testing.T) {
var dummyNode *goeapi.Node
var dummyConnection *DummyConnection

dummyConnection = &DummyConnection{}

dummyNode = &goeapi.Node{}
dummyNode.SetConnection(dummyConnection)

show := Show(dummyNode)
showMACAddressTable, err := show.ShowMACAddressTable()
if err != nil {
t.Errorf("Error during Show MAC Address Table, %s", err)
}

var scenarios = []struct {
MACAddress string
Interface string
VlanID int
}{
{
MACAddress: "ab:cd:ef:12:34:56",
Interface: "Ethernet1",
VlanID: 123,
},
{
MACAddress: "ab:cd:ef:78:90:12",
Interface: "Ethernet2",
VlanID: 456,
},
}

unicastTableEntries := showMACAddressTable.UnicastTable.TableEntries

for i, tt := range scenarios {
if tt.MACAddress != unicastTableEntries[i].MACAddress {
t.Errorf("MACAddress does not match expected %s, got %s", tt.MACAddress, unicastTableEntries[i].MACAddress)
}

if tt.Interface != unicastTableEntries[i].Interface {
t.Errorf("Interface does not match expected %s, got %s", tt.Interface, unicastTableEntries[i].Interface)
}

if tt.VlanID != unicastTableEntries[i].VlanID {
t.Errorf("VlanID does not match expected %d, got %d", tt.VlanID, unicastTableEntries[i].VlanID)
}
}
}

func TestShowMACAddressTableErrorDuringCall_UnitTest(t *testing.T) {
dummyConnection := &DummyConnection{err: errors.New("error during connection")}
dummyNode := &goeapi.Node{}
dummyNode.SetConnection(dummyConnection)

show := Show(dummyNode)
_, err := show.ShowMACAddressTable()
if err == nil {
t.Errorf("Error expected during show mac address-table")
}
}
31 changes: 31 additions & 0 deletions testdata/fixtures/show_mac_address-table.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"jsonrpc": "2.0",
"id": "1",
"result": [
{},
{
"multicastTable": {
"tableEntries": []
},
"unicastTable": {
"tableEntries": [{
"macAddress": "ab:cd:ef:12:34:56",
"lastMove": 1576852145.519468,
"interface": "Ethernet1",
"moves": 1,
"entryType": "dynamic",
"vlanId": 123
},
{
"macAddress": "ab:cd:ef:78:90:12",
"lastMove": 1576850000.519468,
"interface": "Ethernet2",
"moves": 5,
"entryType": "dynamic",
"vlanId": 456
}
]
}
}
]
}

0 comments on commit f5838f8

Please sign in to comment.