package guestd
import (
"os"
"path/filepath"
"testing"
"github.com/openeuler/Conch/internal/netstack"
)
func TestInstallResolverConfig(t *testing.T) {
target := filepath.Join(t.TempDir(), "resolv.conf")
if err := os.WriteFile(target, []byte("old\n"), 0o644); err != nil {
t.Fatal(err)
}
oldTarget := resolverTargetPath
resolverTargetPath = target
t.Cleanup(func() { resolverTargetPath = oldTarget })
if err := installResolverConfig(netstack.DNSConfig{
Nameservers: []string{"10.0.0.53", "8.8.8.8"},
Search: []string{"example.test", "svc.test"},
Options: []string{"timeout:2"},
}); err != nil {
t.Fatalf("installResolverConfig() error = %v", err)
}
content, err := os.ReadFile(target)
if err != nil {
t.Fatal(err)
}
want := "# Generated by Conch\nnameserver 10.0.0.53\nnameserver 8.8.8.8\nsearch example.test svc.test\noptions timeout:2\n"
if string(content) != want {
t.Fatalf("resolver target = %q, want %q", content, want)
}
}
func TestInstallResolverConfigReplacesDanglingSymlink(t *testing.T) {
dir := t.TempDir()
target := filepath.Join(dir, "resolv.conf")
if err := os.Symlink(filepath.Join(dir, "missing", "resolv.conf"), target); err != nil {
t.Fatal(err)
}
oldTarget := resolverTargetPath
resolverTargetPath = target
t.Cleanup(func() { resolverTargetPath = oldTarget })
if err := installResolverConfig(netstack.DNSConfig{
Nameservers: []string{"10.0.0.53"},
}); err != nil {
t.Fatalf("installResolverConfig() error = %v", err)
}
info, err := os.Lstat(target)
if err != nil {
t.Fatal(err)
}
if info.Mode()&os.ModeSymlink != 0 {
t.Fatal("resolver target is still a symbolic link")
}
content, err := os.ReadFile(target)
if err != nil {
t.Fatal(err)
}
want := "# Generated by Conch\nnameserver 10.0.0.53\n"
if string(content) != want {
t.Fatalf("resolver target = %q, want %q", content, want)
}
}