Matthew Rich
e695278d0c
All checks were successful
Declarative Tests / test (push) Successful in 48s
191 lines
3.9 KiB
Go
191 lines
3.9 KiB
Go
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
|
|
package resource
|
|
|
|
import (
|
|
"context"
|
|
_ "encoding/json"
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"gopkg.in/yaml.v3"
|
|
_ "io"
|
|
_ "log"
|
|
_ "net/http"
|
|
_ "net/http/httptest"
|
|
_ "net/url"
|
|
"os"
|
|
"path/filepath"
|
|
_ "strings"
|
|
"syscall"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewFileResource(t *testing.T) {
|
|
f := NewFile()
|
|
assert.NotEqual(t, nil, f)
|
|
}
|
|
|
|
func TestApplyResourceTransformation(t *testing.T) {
|
|
f := NewFile()
|
|
assert.NotEqual(t, nil, f)
|
|
|
|
//e := f.Apply()
|
|
//assert.Equal(t, nil, e)
|
|
}
|
|
|
|
func TestReadFile(t *testing.T) {
|
|
ctx := context.Background()
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "fooread.txt"))
|
|
|
|
declarationAttributes := `
|
|
path: "%s"
|
|
owner: "nobody"
|
|
group: "nobody"
|
|
mode: "0600"
|
|
atime: 2001-12-15T01:01:01.000000001Z
|
|
ctime: %s
|
|
mtime: 2001-12-15T01:01:01.000000001Z
|
|
content: |-
|
|
test line 1
|
|
test line 2
|
|
filetype: "regular"
|
|
state: present
|
|
`
|
|
|
|
decl := fmt.Sprintf(declarationAttributes, file, "2001-12-15T01:01:01.000000001Z")
|
|
|
|
testFile := NewFile()
|
|
e := testFile.LoadDecl(decl)
|
|
assert.Equal(t, nil, e)
|
|
testFile.Apply()
|
|
|
|
f := NewFile()
|
|
assert.NotEqual(t, nil, f)
|
|
|
|
f.Path = file
|
|
r, e := f.Read(ctx)
|
|
assert.Equal(t, nil, e)
|
|
assert.Equal(t, "nobody", f.Owner)
|
|
|
|
info, statErr := os.Stat(file)
|
|
assert.Nil(t, statErr)
|
|
stat, ok := info.Sys().(*syscall.Stat_t)
|
|
assert.True(t, ok)
|
|
cTime := time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec))
|
|
|
|
expected := fmt.Sprintf(declarationAttributes, file, cTime.Format(time.RFC3339Nano))
|
|
assert.YAMLEq(t, expected, string(r))
|
|
}
|
|
|
|
func TestReadFileError(t *testing.T) {
|
|
ctx := context.Background()
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "missingfile.txt"))
|
|
|
|
f := NewFile()
|
|
assert.NotEqual(t, nil, f)
|
|
f.Path = file
|
|
_, e := f.Read(ctx)
|
|
assert.True(t, os.IsNotExist(e))
|
|
assert.Equal(t, "absent", f.State)
|
|
}
|
|
|
|
func TestCreateFile(t *testing.T) {
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "foo.txt"))
|
|
|
|
decl := fmt.Sprintf(`
|
|
path: "%s"
|
|
owner: "nobody"
|
|
group: "nobody"
|
|
mode: "0600"
|
|
content: |-
|
|
test line 1
|
|
test line 2
|
|
state: present
|
|
`, file)
|
|
|
|
f := NewFile()
|
|
e := f.LoadDecl(decl)
|
|
assert.Equal(t, nil, e)
|
|
assert.Equal(t, "nobody", f.Owner)
|
|
|
|
applyErr := f.Apply()
|
|
assert.Equal(t, nil, applyErr)
|
|
assert.FileExists(t, file, nil)
|
|
s, e := os.Stat(file)
|
|
assert.Equal(t, nil, e)
|
|
|
|
assert.Greater(t, s.Size(), int64(0))
|
|
|
|
f.State = "absent"
|
|
assert.Equal(t, nil, f.Apply())
|
|
assert.NoFileExists(t, file, nil)
|
|
}
|
|
|
|
func TestFileType(t *testing.T) {
|
|
fileType := []byte(`
|
|
filetype: "directory"
|
|
`)
|
|
var testFile File
|
|
err := yaml.Unmarshal(fileType, &testFile)
|
|
assert.Nil(t, err)
|
|
|
|
}
|
|
|
|
func TestFileDirectory(t *testing.T) {
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "testdir"))
|
|
|
|
decl := fmt.Sprintf(`
|
|
path: "%s"
|
|
owner: "nobody"
|
|
group: "nobody"
|
|
mode: "0700"
|
|
filetype: "directory"
|
|
state: present
|
|
`, file)
|
|
|
|
f := NewFile()
|
|
e := f.LoadDecl(decl)
|
|
assert.Equal(t, nil, e)
|
|
assert.Equal(t, "nobody", f.Owner)
|
|
|
|
applyErr := f.Apply()
|
|
assert.Equal(t, nil, applyErr)
|
|
assert.DirExists(t, file)
|
|
|
|
f.State = "absent"
|
|
deleteErr := f.Apply()
|
|
assert.Nil(t, deleteErr)
|
|
assert.NoDirExists(t, file)
|
|
}
|
|
|
|
func TestFileTimes(t *testing.T) {
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "testtimes.txt"))
|
|
decl := fmt.Sprintf(`
|
|
path: "%s"
|
|
owner: "nobody"
|
|
group: "nobody"
|
|
mtime: 2001-12-15T01:01:01.1Z
|
|
mode: "0600"
|
|
filtetype: "regular"
|
|
state: "present"
|
|
`, file)
|
|
|
|
expectedTime, timeErr := time.Parse(time.RFC3339, "2001-12-15T01:01:01.1Z")
|
|
assert.Nil(t, timeErr)
|
|
|
|
f := NewFile()
|
|
e := f.LoadDecl(decl)
|
|
assert.Nil(t, e)
|
|
assert.Equal(t, "nobody", f.Owner)
|
|
assert.True(t, f.Mtime.Equal(expectedTime))
|
|
}
|
|
|
|
func TestFileSetURI(t *testing.T) {
|
|
file, _ := filepath.Abs(filepath.Join(TempDir, "testuri.txt"))
|
|
f := NewFile()
|
|
assert.NotNil(t, f)
|
|
f.SetURI("file://" + file)
|
|
assert.Equal(t, "file", f.Type())
|
|
assert.Equal(t, file, f.Path)
|
|
}
|