blob: eb45a7fab63b5ef090a5d0c6a5b9e427956d14d2 [file] [edit]
// Copyright 2024 Google LLC
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// https://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package utils
import (
"os"
"path/filepath"
"testing"
)
func TestSaferWriteFile(t *testing.T) {
f := filepath.Join(t.TempDir(), "file")
want := "test-data"
if err := SaferWriteFile([]byte(want), f, 0644); err != nil {
t.Errorf("SaferWriteFile(%s, %s) failed unexpectedly with err: %+v", "test-data", f, err)
}
got, err := os.ReadFile(f)
if err != nil {
t.Errorf("os.ReadFile(%s) failed unexpectedly with err: %+v", f, err)
}
if string(got) != want {
t.Errorf("os.ReadFile(%s) = %s, want %s", f, string(got), want)
}
i, err := os.Stat(f)
if err != nil {
t.Errorf("os.Stat(%s) failed unexpectedly with err: %+v", f, err)
}
if i.Mode().Perm() != 0o644 {
t.Errorf("SaferWriteFile(%s) set incorrect permissions, os.Stat(%s) = %o, want %o", f, f, i.Mode().Perm(), 0o644)
}
}
func TestCopyFile(t *testing.T) {
tmp := t.TempDir()
dst := filepath.Join(tmp, "dst")
src := filepath.Join(tmp, "src")
want := "testdata"
if err := os.WriteFile(src, []byte(want), 0777); err != nil {
t.Fatalf("failed to write test source file: %v", err)
}
if err := CopyFile(src, dst, 0644); err != nil {
t.Errorf("CopyFile(%s, %s) failed unexpectedly with error: %v", src, dst, err)
}
got, err := os.ReadFile(dst)
if err != nil {
t.Errorf("unable to read %q: %v", dst, err)
}
if string(got) != want {
t.Errorf("CopyFile(%s, %s) copied %q, expected %q", src, dst, string(got), want)
}
i, err := os.Stat(dst)
if err != nil {
t.Errorf("os.Stat(%s) failed unexpectedly with err: %+v", dst, err)
}
if i.Mode().Perm() != 0o644 {
t.Errorf("SaferWriteFile(%s) set incorrect permissions, os.Stat(%s) = %o, want %o", dst, dst, i.Mode().Perm(), 0o644)
}
}
func TestCopyFileError(t *testing.T) {
tmp := t.TempDir()
dst := filepath.Join(tmp, "dst")
src := filepath.Join(tmp, "src")
if err := CopyFile(src, dst, 0644); err == nil {
t.Errorf("CopyFile(%s, %s) succeeded for non-existent file, want error", src, dst)
}
}
func TestFileExists(t *testing.T) {
dir := t.TempDir()
f, err := os.CreateTemp(dir, "file")
if err != nil {
t.Fatalf("os.CreateTemp(%s, file) failed unexpectedly with error: %v", dir, err)
}
defer f.Close()
tests := []struct {
name string
want bool
fType Type
path string
}{
{
name: "existing_file",
want: true,
fType: TypeFile,
path: f.Name(),
},
{
name: "exists_file_want_dir",
want: false,
fType: TypeDir,
path: f.Name(),
},
{
name: "existing_dir",
want: true,
fType: TypeDir,
path: dir,
},
{
name: "exists_dir_want_file",
want: false,
fType: TypeFile,
path: dir,
},
{
name: "non_existing_file",
want: false,
fType: TypeFile,
path: filepath.Join(t.TempDir(), "random"),
},
{
name: "non_existing_dir",
want: false,
fType: TypeDir,
path: filepath.Join(t.TempDir(), "random"),
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := FileExists(test.path, test.fType); got != test.want {
t.Errorf("FileExists(%s, %d) = %t, want = %t", test.path, test.fType, got, test.want)
}
})
}
}