You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.5 KiB
56 lines
1.5 KiB
|
2 months ago
|
package systemtime
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestOSApplierAppliesAndRollsBackTimezoneFile(t *testing.T) {
|
||
|
|
root := t.TempDir()
|
||
|
|
zoneRoot := filepath.Join(root, "zoneinfo")
|
||
|
|
localtime := filepath.Join(root, "etc", "localtime")
|
||
|
|
if err := os.MkdirAll(filepath.Join(zoneRoot, "Asia"), 0o755); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := os.MkdirAll(filepath.Dir(localtime), 0o755); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := os.WriteFile(filepath.Join(zoneRoot, "Asia", "Seoul"), []byte("new-zone"), 0o644); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := os.WriteFile(localtime, []byte("old-zone"), 0o640); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
applier, err := NewOSApplier(zoneRoot, localtime)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
rollback, err := applier.ApplyTimezone(context.Background(), "Asia/Seoul")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("ApplyTimezone() error = %v", err)
|
||
|
|
}
|
||
|
|
content, _ := os.ReadFile(localtime)
|
||
|
|
if string(content) != "new-zone" {
|
||
|
|
t.Fatalf("localtime = %q, want new-zone", content)
|
||
|
|
}
|
||
|
|
if err := rollback(); err != nil {
|
||
|
|
t.Fatalf("rollback() error = %v", err)
|
||
|
|
}
|
||
|
|
content, _ = os.ReadFile(localtime)
|
||
|
|
if string(content) != "old-zone" {
|
||
|
|
t.Fatalf("restored localtime = %q, want old-zone", content)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNewOSApplierRequiresAbsolutePaths(t *testing.T) {
|
||
|
|
if _, err := NewOSApplier("zoneinfo", "/etc/localtime"); err == nil {
|
||
|
|
t.Fatal("NewOSApplier accepted a relative zoneinfo root")
|
||
|
|
}
|
||
|
|
if _, err := NewOSApplier("/usr/share/zoneinfo", "localtime"); err == nil {
|
||
|
|
t.Fatal("NewOSApplier accepted a relative localtime path")
|
||
|
|
}
|
||
|
|
}
|