netplan_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package netplan
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. "nettool/internal/model"
  7. "gopkg.in/yaml.v3"
  8. )
  9. func TestWriteRemovesExistingAddressForStaticInterfaceWithoutIPv4(t *testing.T) {
  10. path := filepath.Join(t.TempDir(), "01-netcfg.yaml")
  11. inputYAML := []byte(`network:
  12. version: 2
  13. ethernets:
  14. enp2s0:
  15. dhcp4: false
  16. addresses:
  17. - 192.168.50.10/24
  18. optional: true
  19. `)
  20. if err := os.WriteFile(path, inputYAML, 0600); err != nil {
  21. t.Fatal(err)
  22. }
  23. err := New().Write(path, "enp2s0", model.InterfaceConfig{
  24. Interface: "enp2s0",
  25. Dhcp4: false,
  26. Addresses: []model.InterfaceAddressConfig{},
  27. }, "", "")
  28. if err != nil {
  29. t.Fatal(err)
  30. }
  31. written, err := os.ReadFile(path)
  32. if err != nil {
  33. t.Fatal(err)
  34. }
  35. var cfg fileConfig
  36. if err := yaml.Unmarshal(written, &cfg); err != nil {
  37. t.Fatal(err)
  38. }
  39. ethernets := cfg.Network["ethernets"].(map[string]any)
  40. target := ethernets["enp2s0"].(map[string]any)
  41. if _, ok := target["addresses"]; ok {
  42. t.Fatalf("expected addresses to be removed, got netplan:\n%s", written)
  43. }
  44. if dhcp4, ok := target["dhcp4"].(bool); !ok || dhcp4 {
  45. t.Fatalf("expected dhcp4=false, got netplan:\n%s", written)
  46. }
  47. if optional, ok := target["optional"].(bool); !ok || !optional {
  48. t.Fatalf("expected unrelated interface fields to be preserved, got netplan:\n%s", written)
  49. }
  50. }