From 9c4a43062cf74884a995ae96fab5806ab5126248 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:57:51 -0400 Subject: [PATCH 01/15] start adding tests for lan related functions in network package includes required imports and two helper functions to build reusable fresh-starts to be used in functions --- network/lan_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 network/lan_test.go diff --git a/network/lan_test.go b/network/lan_test.go new file mode 100644 index 00000000..a2ced90b --- /dev/null +++ b/network/lan_test.go @@ -0,0 +1,27 @@ +package network + +import ( + "net" + "testing" +) + +func buildExampleLAN() *LAN { + iface, _ := FindInterface("") + gateway, _ := FindGateway(iface) + exNewCallback := func(e *Endpoint) {} + exLostCallback := func(e *Endpoint) {} + return NewLAN(iface, gateway, exNewCallback, exLostCallback) +} + +func buildExampleEndpoint() *Endpoint { + ifaces, _ := net.Interfaces() + var exampleIface net.Interface + for _, iface := range ifaces { + if iface.HardwareAddr != nil { + exampleIface = iface + break + } + } + foundEndpoint, _ := FindInterface(exampleIface.Name) + return foundEndpoint +} From ba47e82e778367c485141170dccada5db09b117f Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:58:30 -0400 Subject: [PATCH 02/15] add test for NewLAN --- network/lan_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index a2ced90b..ece960ab 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -25,3 +25,29 @@ func buildExampleEndpoint() *Endpoint { foundEndpoint, _ := FindInterface(exampleIface.Name) return foundEndpoint } + +func TestNewLAN(t *testing.T) { + iface, err := FindInterface("") + if err != nil { + t.Error("no iface found", err) + } + gateway, err := FindGateway(iface) + if err != nil { + t.Error("no gateway found", err) + } + exNewCallback := func(e *Endpoint) {} + exLostCallback := func(e *Endpoint) {} + lan := NewLAN(iface, gateway, exNewCallback, exLostCallback) + if lan.iface != iface { + t.Fatalf("expected '%v', got '%v'", iface, lan.iface) + } + if lan.gateway != gateway { + t.Fatalf("expected '%v', got '%v'", gateway, lan.gateway) + } + if len(lan.hosts) != 0 { + t.Fatalf("expected '%v', got '%v'", 0, len(lan.hosts)) + } + if !(len(lan.aliases.data) >= 0) { + t.Fatalf("expected '%v', got '%v'", 0, len(lan.aliases.data)) + } +} From bb493de4c9c00ab894dbd248999b067ced44d4c1 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:58:51 -0400 Subject: [PATCH 03/15] add test for MarshalJSON --- network/lan_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index ece960ab..26ffec7e 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -51,3 +51,21 @@ func TestNewLAN(t *testing.T) { t.Fatalf("expected '%v', got '%v'", 0, len(lan.aliases.data)) } } + +func TestMarshalJSON(t *testing.T) { + iface, err := FindInterface("") + if err != nil { + t.Error("no iface found", err) + } + gateway, err := FindGateway(iface) + if err != nil { + t.Error("no gateway found", err) + } + exNewCallback := func(e *Endpoint) {} + exLostCallback := func(e *Endpoint) {} + lan := NewLAN(iface, gateway, exNewCallback, exLostCallback) + _, err = lan.MarshalJSON() + if err != nil { + t.Error(err) + } +} From 29486e1bf70f8c9ecf783cd2636146e3aa49209c Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:59:09 -0400 Subject: [PATCH 04/15] add test for SetAliasFor --- network/lan_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index 26ffec7e..d6a7cab2 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -69,3 +69,13 @@ func TestMarshalJSON(t *testing.T) { t.Error(err) } } + +func TestSetAliasFor(t *testing.T) { + exampleAlias := "picat" + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + if !exampleLAN.SetAliasFor(exampleEndpoint.HwAddress, exampleAlias) { + t.Error("unable to set alias for a given mac address") + } +} From e9697e06598909166f7ea7c5a51c35f57cfb1597 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:59:25 -0400 Subject: [PATCH 05/15] add test for Get --- network/lan_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index d6a7cab2..79ba4d76 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -79,3 +79,16 @@ func TestSetAliasFor(t *testing.T) { t.Error("unable to set alias for a given mac address") } } + +func TestGet(t *testing.T) { + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + foundEndpoint, foundBool := exampleLAN.Get(exampleEndpoint.HwAddress) + if foundEndpoint != exampleEndpoint { + t.Fatalf("expected '%v', got '%v'", foundEndpoint, exampleEndpoint) + } + if !foundBool { + t.Error("unable to get known endpoint via mac address from LAN struct") + } +} From a3e173a847933a1b2ee66948dc9473754f3ba400 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 14:59:41 -0400 Subject: [PATCH 06/15] add test for List --- network/lan_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index 79ba4d76..a5c2e268 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -92,3 +92,18 @@ func TestGet(t *testing.T) { t.Error("unable to get known endpoint via mac address from LAN struct") } } + +func TestList(t *testing.T) { + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + foundList := exampleLAN.List() + if len(foundList) != 1 { + t.Fatalf("expected '%d', got '%d'", 1, len(foundList)) + } + exp := 1 + got := len(exampleLAN.List()) + if got != exp { + t.Fatalf("expected '%d', got '%d'", exp, got) + } +} From 50ebf3e53ae823cd3dac8e1639c2b72eca4b28da Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:00:00 -0400 Subject: [PATCH 07/15] add test for Aliases --- network/lan_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index a5c2e268..ca2546e5 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -107,3 +107,15 @@ func TestList(t *testing.T) { t.Fatalf("expected '%d', got '%d'", exp, got) } } + +func TestAliases(t *testing.T) { + exampleAlias := "picat" + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + exp := exampleAlias + got := exampleLAN.Aliases().Get(exampleEndpoint.HwAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } +} From d94532c473127505ac23672481383cc37491ebdc Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:00:17 -0400 Subject: [PATCH 08/15] add test for WasMissed --- network/lan_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index ca2546e5..6a59ffc4 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -119,3 +119,14 @@ func TestAliases(t *testing.T) { t.Fatalf("expected '%v', got '%v'", exp, got) } } + +func TestWasMissed(t *testing.T) { + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + exp := false + got := exampleLAN.WasMissed(exampleEndpoint.HwAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } +} From effbf951b53534a0f80e923454a5568019cb20a5 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:01:58 -0400 Subject: [PATCH 09/15] add TODO in test for Remove MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adding a TODO to help remind myself to fix this later: the Remove function seems to have an unnecessary argument called “ip” which is never used. To be fair, I guess I could’ve just wrote a test for this and changed it later. --- network/lan_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index 6a59ffc4..a7e709a1 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -130,3 +130,7 @@ func TestWasMissed(t *testing.T) { t.Fatalf("expected '%v', got '%v'", exp, got) } } + +// TODO Add TestRemove after removing unnecessary ip argument +// func TestRemove(t *testing.T) { +// } From 050eaaf6bcdc009c0f70ed453acec11b153ed0b8 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:02:14 -0400 Subject: [PATCH 10/15] add test for Has --- network/lan_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index a7e709a1..eb5529ce 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -134,3 +134,12 @@ func TestWasMissed(t *testing.T) { // TODO Add TestRemove after removing unnecessary ip argument // func TestRemove(t *testing.T) { // } + +func TestHas(t *testing.T) { + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + if !exampleLAN.Has(exampleEndpoint.IpAddress) { + t.Error("unable find a known IP address in LAN struct") + } +} From 4b82e917c7631d38ac20cd0a2ed8b79a9543916b Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:02:30 -0400 Subject: [PATCH 11/15] add test for EachHost --- network/lan_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index eb5529ce..1aa2cf38 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -143,3 +143,19 @@ func TestHas(t *testing.T) { t.Error("unable find a known IP address in LAN struct") } } + +func TestEachHost(t *testing.T) { + exampleBuffer := []string{} + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + exampleCB := func(mac string, e *Endpoint) { + exampleBuffer = append(exampleBuffer, exampleEndpoint.HwAddress) + } + exampleLAN.EachHost(exampleCB) + exp := 1 + got := len(exampleBuffer) + if got != exp { + t.Fatalf("expected '%d', got '%d'", exp, got) + } +} From dcc7ca2cbddf01ecfb0cb6f488b00bf0929b8aa0 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:03:20 -0400 Subject: [PATCH 12/15] add test for GetByIp possible TODO: rename GetByIp to GetByIP like golint says to do? --- network/lan_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index 1aa2cf38..970edc72 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -159,3 +159,15 @@ func TestEachHost(t *testing.T) { t.Fatalf("expected '%d', got '%d'", exp, got) } } + +func TestGetByIp(t *testing.T) { + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + + exp := exampleEndpoint + got := exampleLAN.GetByIp(exampleEndpoint.IpAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } +} From 65b28e028f4ef18a760665661c97858e47a04539 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:03:42 -0400 Subject: [PATCH 13/15] add test for AddIfNew --- network/lan_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index 970edc72..cc70610e 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -171,3 +171,12 @@ func TestGetByIp(t *testing.T) { t.Fatalf("expected '%v', got '%v'", exp, got) } } + +func TestAddIfNew(t *testing.T) { + exampleLAN := buildExampleLAN() + iface, _ := FindInterface("") + // won't add our own IP address + if exampleLAN.AddIfNew(iface.IpAddress, iface.HwAddress) != nil { + t.Error("added address that should've been ignored ( your own )") + } +} From d641fbf5c329bef3038942346c1368fa94fac16c Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:03:56 -0400 Subject: [PATCH 14/15] add test for GetAlias --- network/lan_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index cc70610e..ba069fbb 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -180,3 +180,15 @@ func TestAddIfNew(t *testing.T) { t.Error("added address that should've been ignored ( your own )") } } + +func TestGetAlias(t *testing.T) { + exampleAlias := "picat" + exampleLAN := buildExampleLAN() + exampleEndpoint := buildExampleEndpoint() + exampleLAN.hosts[exampleEndpoint.HwAddress] = exampleEndpoint + exp := exampleAlias + got := exampleLAN.GetAlias(exampleEndpoint.HwAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } +} From d3c8afb3fb6a8f143f8b60950af7cefb5c1d2cf0 Mon Sep 17 00:00:00 2001 From: Kent Gruber Date: Tue, 1 May 2018 15:04:55 -0400 Subject: [PATCH 15/15] add test for shouldIgnore --- network/lan_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/network/lan_test.go b/network/lan_test.go index ba069fbb..7cdc7ef8 100644 --- a/network/lan_test.go +++ b/network/lan_test.go @@ -192,3 +192,18 @@ func TestGetAlias(t *testing.T) { t.Fatalf("expected '%v', got '%v'", exp, got) } } + +func TestShouldIgnore(t *testing.T) { + exampleLAN := buildExampleLAN() + iface, _ := FindInterface("") + gateway, _ := FindGateway(iface) + exp := true + got := exampleLAN.shouldIgnore(iface.IpAddress, iface.HwAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } + got = exampleLAN.shouldIgnore(gateway.IpAddress, gateway.HwAddress) + if got != exp { + t.Fatalf("expected '%v', got '%v'", exp, got) + } +}