]> ruderich.org/simon Gitweb - safcm/safcm.git/commitdiff
sync: move file related test functions to new package filetest
authorSimon Ruderich <simon@ruderich.org>
Sun, 4 Apr 2021 19:25:14 +0000 (21:25 +0200)
committerSimon Ruderich <simon@ruderich.org>
Mon, 5 Apr 2021 07:41:12 +0000 (09:41 +0200)
They will be used by other packages in the near future.

cmd/safcm-remote/sync/files_test.go
cmd/safcm-remote/sync/filetest/filetest.go [new file with mode: 0644]

index 22daa63fae92537239b21cb3fab375f7329ab313..c5c7216f81228debd074aa72a558ce97e64a9394 100644 (file)
@@ -20,66 +20,17 @@ import (
        "io/fs"
        "math/rand"
        "os"
-       "os/user"
        "path/filepath"
        "reflect"
        "regexp"
-       "strconv"
-       "syscall"
        "testing"
 
        "github.com/google/go-cmp/cmp"
 
        "ruderich.org/simon/safcm"
+       ft "ruderich.org/simon/safcm/cmd/safcm-remote/sync/filetest"
 )
 
-type File struct {
-       Path string
-       Mode fs.FileMode
-       Data []byte
-}
-
-func walkDir(basePath string) ([]File, error) {
-       var res []File
-       err := filepath.WalkDir(basePath, func(path string, d fs.DirEntry, err error) error {
-               if err != nil {
-                       return err
-               }
-               info, err := d.Info()
-               if err != nil {
-                       return err
-               }
-               rel, err := filepath.Rel(basePath, path)
-               if err != nil {
-                       return err
-               }
-
-               f := File{
-                       Path: rel,
-                       Mode: info.Mode(),
-               }
-               if f.Mode.Type() == 0 {
-                       x, err := os.ReadFile(path)
-                       if err != nil {
-                               return err
-                       }
-                       f.Data = x
-               } else if f.Mode.Type() == fs.ModeSymlink {
-                       x, err := os.Readlink(path)
-                       if err != nil {
-                               return err
-                       }
-                       f.Data = []byte(x)
-               }
-               res = append(res, f)
-               return nil
-       })
-       if err != nil {
-               return nil, err
-       }
-       return res, nil
-}
-
 var randFilesRegexp = regexp.MustCompile(`\d+"$`)
 
 func TestSyncFiles(t *testing.T) {
@@ -98,11 +49,11 @@ func TestSyncFiles(t *testing.T) {
                t.Fatal(err)
        }
 
-       root := File{
+       root := ft.File{
                Path: ".",
                Mode: fs.ModeDir | 0700,
        }
-       user, uid, group, gid := currentUserAndGroup()
+       user, uid, group, gid := ft.CurrentUserAndGroup()
 
        tmpTestFilePath := "/tmp/safcm-sync-files-test-file"
 
@@ -111,7 +62,7 @@ func TestSyncFiles(t *testing.T) {
                req      safcm.MsgSyncReq
                prepare  func()
                triggers []string
-               expFiles []File
+               expFiles []ft.File
                expResp  safcm.MsgSyncResp
                expDbg   []string
                expErr   error
@@ -153,7 +104,7 @@ func TestSyncFiles(t *testing.T) {
                        },
                        nil,
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -235,11 +186,11 @@ func TestSyncFiles(t *testing.T) {
                                },
                        },
                        func() {
-                               createDirectory("dir", 0755)
-                               createFile("dir/file", "content\n", 0644)
+                               ft.CreateDirectory("dir", 0755)
+                               ft.CreateFile("dir/file", "content\n", 0644)
                        },
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -276,7 +227,7 @@ func TestSyncFiles(t *testing.T) {
                        },
                        nil,
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                        },
                        safcm.MsgSyncResp{},
@@ -299,7 +250,7 @@ func TestSyncFiles(t *testing.T) {
                        },
                        nil,
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                        },
                        safcm.MsgSyncResp{},
@@ -355,7 +306,7 @@ func TestSyncFiles(t *testing.T) {
                        },
                        nil,
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                        },
                        safcm.MsgSyncResp{},
@@ -406,11 +357,11 @@ func TestSyncFiles(t *testing.T) {
                                },
                        },
                        func() {
-                               createDirectory("dir", 0755)
-                               createFile("dir/file", "content\n", 0644)
+                               ft.CreateDirectory("dir", 0755)
+                               ft.CreateFile("dir/file", "content\n", 0644)
                        },
                        nil,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -473,13 +424,13 @@ func TestSyncFiles(t *testing.T) {
                                if err != nil {
                                        panic(err)
                                }
-                               createDirectory("dir", 0755)
-                               createFile("dir/file", "content\n", 0644)
+                               ft.CreateDirectory("dir", 0755)
+                               ft.CreateFile("dir/file", "content\n", 0644)
                        },
                        []string{
                                ".",
                        },
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -561,14 +512,14 @@ func TestSyncFiles(t *testing.T) {
                                },
                        },
                        func() {
-                               createDirectory("dir", 0750)
-                               createFile("dir/file", "content\n", 0644)
+                               ft.CreateDirectory("dir", 0750)
+                               ft.CreateFile("dir/file", "content\n", 0644)
                        },
                        []string{
                                ".",
                                "dir",
                        },
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -651,14 +602,14 @@ func TestSyncFiles(t *testing.T) {
                                },
                        },
                        func() {
-                               createDirectory("dir", 0755)
+                               ft.CreateDirectory("dir", 0755)
                        },
                        []string{
                                ".",
                                "dir",
                                "dir/file",
                        },
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -742,7 +693,7 @@ func TestSyncFiles(t *testing.T) {
                                "dir",
                                "dir/file",
                        },
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -856,7 +807,7 @@ func TestSyncFiles(t *testing.T) {
                                // Don't use variable for more robust test
                                "/tmp/safcm-sync-files-test-file",
                        },
-                       []File{
+                       []ft.File{
                                root,
                        },
                        safcm.MsgSyncResp{
@@ -927,7 +878,7 @@ func TestSyncFiles(t *testing.T) {
                                cmp.Diff(tc.expDbg, dbg))
                }
 
-               files, err := walkDir(path)
+               files, err := ft.WalkDir(path)
                if err != nil {
                        t.Fatal(err)
                }
@@ -971,11 +922,11 @@ func TestSyncFile(t *testing.T) {
                t.Fatal(err)
        }
 
-       root := File{
+       root := ft.File{
                Path: ".",
                Mode: fs.ModeDir | 0700,
        }
-       user, uid, group, gid := currentUserAndGroup()
+       user, uid, group, gid := ft.CurrentUserAndGroup()
 
        tests := []struct {
                name       string
@@ -983,7 +934,7 @@ func TestSyncFile(t *testing.T) {
                file       *safcm.File
                prepare    func()
                expChanged bool
-               expFiles   []File
+               expFiles   []ft.File
                expResp    safcm.MsgSyncResp
                expDbg     []string
                expErr     error
@@ -1009,7 +960,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -1055,7 +1006,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{root},
+                       []ft.File{root},
                        safcm.MsgSyncResp{
                                FileChanges: []safcm.FileChange{
                                        {
@@ -1091,10 +1042,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "content\n", 0644)
+                               ft.CreateFile("file", "content\n", 0644)
                        },
                        false,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -1123,10 +1074,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "content\n", 0644)
+                               ft.CreateFile("file", "content\n", 0644)
                        },
                        false,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -1153,10 +1104,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "content\n", 0755)
+                               ft.CreateFile("file", "content\n", 0755)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -1206,10 +1157,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "old content\n", 0644)
+                               ft.CreateFile("file", "old content\n", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -1267,7 +1218,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "link",
@@ -1310,10 +1261,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile(".link8717895732742165505", "", 0600)
+                               ft.CreateFile(".link8717895732742165505", "", 0600)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: ".link8717895732742165505",
@@ -1365,7 +1316,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{root},
+                       []ft.File{root},
                        safcm.MsgSyncResp{
                                FileChanges: []safcm.FileChange{
                                        {
@@ -1401,10 +1352,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createSymlink("link", "target")
+                               ft.CreateSymlink("link", "target")
                        },
                        false,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "link",
@@ -1431,10 +1382,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createSymlink("link", "old-target")
+                               ft.CreateSymlink("link", "old-target")
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "link",
@@ -1490,7 +1441,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -1535,7 +1486,7 @@ func TestSyncFile(t *testing.T) {
                        },
                        nil,
                        true,
-                       []File{root},
+                       []ft.File{root},
                        safcm.MsgSyncResp{
                                FileChanges: []safcm.FileChange{
                                        {
@@ -1570,10 +1521,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createDirectory("dir", 0755)
+                               ft.CreateDirectory("dir", 0755)
                        },
                        false,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -1598,10 +1549,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createDirectory("dir", 0500|fs.ModeSticky)
+                               ft.CreateDirectory("dir", 0500|fs.ModeSticky)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "dir",
@@ -1650,10 +1601,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("path", "content\n", 0644)
+                               ft.CreateFile("path", "content\n", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1708,10 +1659,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("target"),
                        },
                        func() {
-                               createFile("path", "content\n", 0644)
+                               ft.CreateFile("path", "content\n", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1766,10 +1717,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("content\n"),
                        },
                        func() {
-                               createSymlink("path", "target")
+                               ft.CreateSymlink("path", "target")
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1823,10 +1774,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createSymlink("path", "target")
+                               ft.CreateSymlink("path", "target")
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1881,10 +1832,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("content\n"),
                        },
                        func() {
-                               createDirectory("path", 0777)
+                               ft.CreateDirectory("path", 0777)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1935,10 +1886,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("target"),
                        },
                        func() {
-                               createDirectory("path", 0777)
+                               ft.CreateDirectory("path", 0777)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -1989,10 +1940,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("content\n"),
                        },
                        func() {
-                               createFifo("path", 0666)
+                               ft.CreateFifo("path", 0666)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -2042,10 +1993,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("target"),
                        },
                        func() {
-                               createFifo("path", 0666)
+                               ft.CreateFifo("path", 0666)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -2094,10 +2045,10 @@ func TestSyncFile(t *testing.T) {
                                OrigGroup: "group",
                        },
                        func() {
-                               createFifo("path", 0666)
+                               ft.CreateFifo("path", 0666)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -2148,10 +2099,10 @@ func TestSyncFile(t *testing.T) {
                                Data:      []byte("target"),
                        },
                        func() {
-                               createFile("path", "target", 0644)
+                               ft.CreateFile("path", "target", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "path",
@@ -2211,14 +2162,14 @@ file
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", `this
+                               ft.CreateFile("file", `this
 is
 file
 !
 `, 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -2283,10 +2234,10 @@ file
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "\x00\x01\x02", 0644)
+                               ft.CreateFile("file", "\x00\x01\x02", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -2338,10 +2289,10 @@ file
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "\x00\x01\x02", 0644)
+                               ft.CreateFile("file", "\x00\x01\x02", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -2397,10 +2348,10 @@ file
                                OrigGroup: "group",
                        },
                        func() {
-                               createFile("file", "content\n", 0644)
+                               ft.CreateFile("file", "content\n", 0644)
                        },
                        true,
-                       []File{
+                       []ft.File{
                                root,
                                {
                                        Path: "file",
@@ -2485,7 +2436,7 @@ file
                                cmp.Diff(tc.expDbg, dbg))
                }
 
-               files, err := walkDir(path)
+               files, err := ft.WalkDir(path)
                if err != nil {
                        t.Fatal(err)
                }
@@ -2511,62 +2462,3 @@ file
                }
        }
 }
-
-// Helper functions
-
-func createFile(path string, data string, mode fs.FileMode) {
-       err := os.WriteFile(path, []byte(data), 0644)
-       if err != nil {
-               panic(err)
-       }
-       err = os.Chmod(path, mode)
-       if err != nil {
-               panic(err)
-       }
-}
-func createSymlink(path string, data string) {
-       err := os.Symlink(data, path)
-       if err != nil {
-               panic(err)
-       }
-}
-func createDirectory(path string, mode fs.FileMode) {
-       err := os.Mkdir(path, 0700)
-       if err != nil {
-               panic(err)
-       }
-       err = os.Chmod(path, mode)
-       if err != nil {
-               panic(err)
-       }
-}
-func createFifo(path string, mode fs.FileMode) {
-       err := syscall.Mkfifo(path, 0600)
-       if err != nil {
-               panic(err)
-       }
-       err = os.Chmod(path, mode)
-       if err != nil {
-               panic(err)
-       }
-}
-
-func currentUserAndGroup() (string, int, string, int) {
-       u, err := user.Current()
-       if err != nil {
-               panic(err)
-       }
-       g, err := user.LookupGroupId(u.Gid)
-       if err != nil {
-               panic(err)
-       }
-       uid, err := strconv.Atoi(u.Uid)
-       if err != nil {
-               panic(err)
-       }
-       gid, err := strconv.Atoi(g.Gid)
-       if err != nil {
-               panic(err)
-       }
-       return u.Username, uid, g.Name, gid
-}
diff --git a/cmd/safcm-remote/sync/filetest/filetest.go b/cmd/safcm-remote/sync/filetest/filetest.go
new file mode 100644 (file)
index 0000000..b6fcb7c
--- /dev/null
@@ -0,0 +1,134 @@
+// Utility functions useful for file-related tests
+
+// Copyright (C) 2021  Simon Ruderich
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package filetest
+
+import (
+       "io/fs"
+       "os"
+       "os/user"
+       "path/filepath"
+       "strconv"
+       "syscall"
+)
+
+type File struct {
+       Path string
+       Mode fs.FileMode
+       Data []byte
+}
+
+func WalkDir(basePath string) ([]File, error) {
+       var res []File
+       err := filepath.WalkDir(basePath, func(path string, d fs.DirEntry, err error) error {
+               if err != nil {
+                       return err
+               }
+               info, err := d.Info()
+               if err != nil {
+                       return err
+               }
+               rel, err := filepath.Rel(basePath, path)
+               if err != nil {
+                       return err
+               }
+
+               f := File{
+                       Path: rel,
+                       Mode: info.Mode(),
+               }
+               if f.Mode.Type() == 0 {
+                       x, err := os.ReadFile(path)
+                       if err != nil {
+                               return err
+                       }
+                       f.Data = x
+               } else if f.Mode.Type() == fs.ModeSymlink {
+                       x, err := os.Readlink(path)
+                       if err != nil {
+                               return err
+                       }
+                       f.Data = []byte(x)
+               }
+               res = append(res, f)
+               return nil
+       })
+       if err != nil {
+               return nil, err
+       }
+       return res, nil
+}
+
+func CurrentUserAndGroup() (string, int, string, int) {
+       u, err := user.Current()
+       if err != nil {
+               panic(err)
+       }
+       g, err := user.LookupGroupId(u.Gid)
+       if err != nil {
+               panic(err)
+       }
+       uid, err := strconv.Atoi(u.Uid)
+       if err != nil {
+               panic(err)
+       }
+       gid, err := strconv.Atoi(g.Gid)
+       if err != nil {
+               panic(err)
+       }
+       return u.Username, uid, g.Name, gid
+}
+
+func CreateFile(path string, data string, mode fs.FileMode) {
+       err := os.WriteFile(path, []byte(data), 0644)
+       if err != nil {
+               panic(err)
+       }
+       err = os.Chmod(path, mode)
+       if err != nil {
+               panic(err)
+       }
+}
+
+func CreateSymlink(path string, data string) {
+       err := os.Symlink(data, path)
+       if err != nil {
+               panic(err)
+       }
+}
+
+func CreateDirectory(path string, mode fs.FileMode) {
+       err := os.Mkdir(path, 0700)
+       if err != nil {
+               panic(err)
+       }
+       err = os.Chmod(path, mode)
+       if err != nil {
+               panic(err)
+       }
+}
+
+func CreateFifo(path string, mode fs.FileMode) {
+       err := syscall.Mkfifo(path, 0600)
+       if err != nil {
+               panic(err)
+       }
+       err = os.Chmod(path, mode)
+       if err != nil {
+               panic(err)
+       }
+}