diff options
author | xegineering <me@xegineering.eu> | 2024-10-01 21:44:47 +0200 |
---|---|---|
committer | xegineering <me@xegineering.eu> | 2024-10-01 21:44:47 +0200 |
commit | c472e5c7dee2e1cb16e297b23726a714521e8e0b (patch) | |
tree | d03d0f6e5b1317971bf10fd91a219ad2f2fa0408 /soundbox | |
parent | 23f804bec8763ff832875ad8b8d57279b98fa590 (diff) | |
download | soundbox-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.
Diffstat (limited to 'soundbox')
-rw-r--r-- | soundbox/soundbox.go | 25 | ||||
-rw-r--r-- | soundbox/soundbox_test.go | 25 |
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) + } +} |