|
|
|
|
@ -22,6 +22,9 @@ import (
|
|
|
|
|
"path/filepath"
|
|
|
|
|
"strings"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// TestAtomicWriteFile tests the happy path of AtomicWriteFile function.
|
|
|
|
|
@ -35,28 +38,17 @@ func TestAtomicWriteFile(t *testing.T) {
|
|
|
|
|
mode := os.FileMode(0644)
|
|
|
|
|
|
|
|
|
|
err := AtomicWriteFile(testpath, reader, mode)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("AtomicWriteFile error: %s", err)
|
|
|
|
|
}
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
got, err := os.ReadFile(testpath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
if stringContent != string(got) {
|
|
|
|
|
t.Fatalf("expected: %s, got: %s", stringContent, string(got))
|
|
|
|
|
}
|
|
|
|
|
require.Equal(t, stringContent, string(got))
|
|
|
|
|
|
|
|
|
|
gotinfo, err := os.Stat(testpath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if mode != gotinfo.Mode() {
|
|
|
|
|
t.Fatalf("expected %s: to be the same mode as %s",
|
|
|
|
|
mode, gotinfo.Mode())
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
require.Equal(t, mode, gotinfo.Mode())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TestAtomicWriteFile_CreateTempError tests the error path when os.CreateTemp fails
|
|
|
|
|
@ -67,9 +59,7 @@ func TestAtomicWriteFile_CreateTempError(t *testing.T) {
|
|
|
|
|
mode := os.FileMode(0644)
|
|
|
|
|
|
|
|
|
|
err := AtomicWriteFile(invalidPath, reader, mode)
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Error("Expected error when CreateTemp fails, but got nil")
|
|
|
|
|
}
|
|
|
|
|
assert.Error(t, err, "Expected error when CreateTemp fails")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TestAtomicWriteFile_EmptyContent tests with empty content
|
|
|
|
|
@ -81,18 +71,12 @@ func TestAtomicWriteFile_EmptyContent(t *testing.T) {
|
|
|
|
|
mode := os.FileMode(0644)
|
|
|
|
|
|
|
|
|
|
err := AtomicWriteFile(testpath, reader, mode)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("AtomicWriteFile error with empty content: %s", err)
|
|
|
|
|
}
|
|
|
|
|
assert.NoError(t, err, "AtomicWriteFile error with empty content")
|
|
|
|
|
|
|
|
|
|
got, err := os.ReadFile(testpath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
if len(got) != 0 {
|
|
|
|
|
t.Fatalf("expected empty content, got: %s", string(got))
|
|
|
|
|
}
|
|
|
|
|
require.Empty(t, got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TestAtomicWriteFile_LargeContent tests with large content
|
|
|
|
|
@ -106,18 +90,12 @@ func TestAtomicWriteFile_LargeContent(t *testing.T) {
|
|
|
|
|
mode := os.FileMode(0644)
|
|
|
|
|
|
|
|
|
|
err := AtomicWriteFile(testpath, reader, mode)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("AtomicWriteFile error with large content: %s", err)
|
|
|
|
|
}
|
|
|
|
|
assert.NoError(t, err, "AtomicWriteFile error with large content")
|
|
|
|
|
|
|
|
|
|
got, err := os.ReadFile(testpath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
if largeContent != string(got) {
|
|
|
|
|
t.Fatalf("expected large content to match, got different length: %d vs %d", len(largeContent), len(got))
|
|
|
|
|
}
|
|
|
|
|
require.Equal(t, largeContent, string(got))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TestPlatformAtomicWriteFile_OverwritesExisting verifies that the platform
|
|
|
|
|
@ -127,21 +105,13 @@ func TestPlatformAtomicWriteFile_OverwritesExisting(t *testing.T) {
|
|
|
|
|
path := filepath.Join(dir, "overwrite_test")
|
|
|
|
|
|
|
|
|
|
first := bytes.NewReader([]byte("first"))
|
|
|
|
|
if err := PlatformAtomicWriteFile(path, first, 0644); err != nil {
|
|
|
|
|
t.Fatalf("first write failed: %v", err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, PlatformAtomicWriteFile(path, first, 0644), "first write failed")
|
|
|
|
|
|
|
|
|
|
second := bytes.NewReader([]byte("second"))
|
|
|
|
|
if err := PlatformAtomicWriteFile(path, second, 0644); err != nil {
|
|
|
|
|
t.Fatalf("second write failed: %v", err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, PlatformAtomicWriteFile(path, second, 0644), "second write failed")
|
|
|
|
|
|
|
|
|
|
contents, err := os.ReadFile(path)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed reading result: %v", err)
|
|
|
|
|
}
|
|
|
|
|
require.NoError(t, err, "failed reading result")
|
|
|
|
|
|
|
|
|
|
if string(contents) != "second" {
|
|
|
|
|
t.Fatalf("expected file to be overwritten, got %q", string(contents))
|
|
|
|
|
}
|
|
|
|
|
require.Equal(t, "second", string(contents))
|
|
|
|
|
}
|
|
|
|
|
|