summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxegineering <me@xegineering.eu>2024-10-01 21:44:47 +0200
committerxegineering <me@xegineering.eu>2024-10-01 21:44:47 +0200
commitc472e5c7dee2e1cb16e297b23726a714521e8e0b (patch)
treed03d0f6e5b1317971bf10fd91a219ad2f2fa0408
parent23f804bec8763ff832875ad8b8d57279b98fa590 (diff)
downloadsoundbox-go-c472e5c7dee2e1cb16e297b23726a714521e8e0b.tar
soundbox-go-c472e5c7dee2e1cb16e297b23726a714521e8e0b.tar.zst
soundbox-go-c472e5c7dee2e1cb16e297b23726a714521e8e0b.zip
Add minimal soundbox Go package
This only adds the `Soundbox` struct type which has a `net.HardwareAddr` to identify it together with a constructor and a unit test.
-rw-r--r--soundbox/soundbox.go25
-rw-r--r--soundbox/soundbox_test.go25
2 files changed, 50 insertions, 0 deletions
diff --git a/soundbox/soundbox.go b/soundbox/soundbox.go
new file mode 100644
index 0000000..fcabcdc
--- /dev/null
+++ b/soundbox/soundbox.go
@@ -0,0 +1,25 @@
+package soundbox
+
+import (
+ "fmt"
+ "net"
+)
+
+type Soundbox struct {
+ HardwareAddr net.HardwareAddr
+}
+
+func NewSoundbox(mac string) (Soundbox, error) {
+ hardwareAddr, err := net.ParseMAC(mac)
+ if err != nil {
+ return Soundbox{}, err
+ }
+
+ if len(hardwareAddr) != 6 {
+ return Soundbox{}, fmt.Errorf("Only IEEE 802 MAC-48 addresses supported")
+ }
+
+ return Soundbox{
+ HardwareAddr: hardwareAddr,
+ }, nil
+}
diff --git a/soundbox/soundbox_test.go b/soundbox/soundbox_test.go
new file mode 100644
index 0000000..6a5cde3
--- /dev/null
+++ b/soundbox/soundbox_test.go
@@ -0,0 +1,25 @@
+package soundbox
+
+import (
+ "testing"
+)
+
+func TestNewSoundbox(t *testing.T) {
+ // valid MAC should succeed
+ _, err := NewSoundbox("12:34:56:ab:cd:ef")
+ if err != nil {
+ t.Errorf("NewSoundbox() failed: %v", err)
+ }
+
+ // invalid MAC should fail
+ _, err = NewSoundbox("12:34:56:ab:cd")
+ if err == nil {
+ t.Errorf("NewSoundbox() failed: %v", err)
+ }
+
+ // No EUI-64 supported
+ _, err = NewSoundbox("12:34:56:ab:cd:ef:12:45")
+ if err == nil {
+ t.Errorf("NewSoundbox() failed: %v", err)
+ }
+}