Feat: Interfaces io.Reader and fmt.Stringer
This commit is contained in:
parent
9ff67c6b84
commit
69b776caea
44
ifaces.go
44
ifaces.go
@ -1,8 +1,11 @@
|
||||
package iface
|
||||
package ifupdown
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
@ -11,12 +14,43 @@ import (
|
||||
|
||||
type Interfaces map[string]*NetworkInterface
|
||||
|
||||
type poolGroup struct {
|
||||
Buffers pool.BufferFactory
|
||||
Strs pool.StringFactory
|
||||
func (i Interfaces) buf() *pool.Buffer {
|
||||
buf := pools.Buffers.Get()
|
||||
for _, iface := range i {
|
||||
err := iface.write(func(s string) { buf.MustWrite([]byte(s)) })
|
||||
if err != nil && !errors.Is(err, io.EOF) {
|
||||
panic(err)
|
||||
}
|
||||
buf.MustWrite([]byte("\n"))
|
||||
}
|
||||
return buf
|
||||
}
|
||||
|
||||
var pools = poolGroup{Buffers: pool.NewBufferFactory(), Strs: pool.NewStringFactory()}
|
||||
func (i Interfaces) Read(p []byte) (int, error) {
|
||||
buf := i.buf()
|
||||
defer pools.Buffers.MustPut(buf)
|
||||
return buf.Read(p)
|
||||
}
|
||||
|
||||
func (i Interfaces) String() string {
|
||||
buf := i.buf()
|
||||
defer pools.Buffers.MustPut(buf)
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (i Interfaces) UnmarshalJSON(data []byte) error {
|
||||
var ifaces map[string]*NetworkInterface
|
||||
if err := json.Unmarshal(data, &ifaces); err != nil {
|
||||
return err
|
||||
}
|
||||
for name, iface := range ifaces {
|
||||
iface.Name = name
|
||||
iface.allocated = true
|
||||
i[name] = iface
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type MultiParser struct {
|
||||
Interfaces map[string]*NetworkInterface
|
||||
|
@ -1,4 +1,4 @@
|
||||
package iface
|
||||
package ifupdown
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -19,7 +19,8 @@ iface eth0 inet dhcp
|
||||
t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
|
||||
err = mp.Parse()
|
||||
var ifaces Interfaces
|
||||
ifaces, err = mp.Parse()
|
||||
if err != nil {
|
||||
t.Fatalf("Expected nil error, got: %v", err)
|
||||
}
|
||||
@ -28,6 +29,10 @@ iface eth0 inet dhcp
|
||||
t.Fatalf("Expected 2 interfaces, got: %d", len(mp.Interfaces))
|
||||
}
|
||||
|
||||
if len(mp.Interfaces) != len(ifaces) {
|
||||
t.Fatalf("Expected %d interfaces, got: %d", len(mp.Interfaces), len(ifaces))
|
||||
}
|
||||
|
||||
loIface, ok := mp.Interfaces["lo"]
|
||||
if !ok || loIface.Name != "lo" {
|
||||
t.Fatalf("Expected to find interface 'lo', got: %+v", loIface)
|
||||
@ -37,6 +42,11 @@ iface eth0 inet dhcp
|
||||
if !ok || eth0Iface.Name != "eth0" {
|
||||
t.Fatalf("Expected to find interface 'eth0', got: %+v", eth0Iface)
|
||||
}
|
||||
for _, iface := range ifaces {
|
||||
if err = iface.Validate(); err != nil {
|
||||
t.Fatalf("Expected nil error, got: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add more test functions here to check other aspects and edge cases.
|
||||
|
Loading…
Reference in New Issue
Block a user