1 package dhclient
2
3 import (
4 "context"
5 "errors"
6 "io"
7 "os"
8 "path/filepath"
9 "testing"
10
11 "github.com/stretchr/testify/require"
12 testfs "gotest.tools/v3/fs"
13
14 "edge-infra.dev/pkg/k8s/runtime/controller/reconcile"
15 )
16
17 func TestReconcile(t *testing.T) {
18 testCases := []struct {
19 name string
20 err error
21 folderExists bool
22 fileExists bool
23 }{
24 {
25 name: "some file exists in the folder",
26 err: nil,
27 folderExists: true,
28 fileExists: true,
29 },
30 {
31 name: "folder exists but empty",
32 err: nil,
33 folderExists: true,
34 fileExists: false,
35 },
36 {
37 name: "no folder or file",
38 err: nil,
39 folderExists: false,
40 fileExists: false,
41 },
42 }
43 for _, tc := range testCases {
44 t.Run(tc.name, func(t *testing.T) {
45 p := Plugin{}
46 if tc.folderExists {
47 dir := testfs.NewDir(t, dhcpPath)
48 dhcpPath = dir.Path()
49 }
50 if tc.folderExists && tc.fileExists {
51 err := os.WriteFile(filepath.Join(dhcpPath, "test.conf"), []byte("test"), 0644)
52 require.NoErrorf(t, err, tc.name)
53 }
54 result, err := p.Reconcile(context.TODO(), nil, nil)
55 require.ErrorIsf(t, err, tc.err, tc.name)
56 if err == nil {
57 require.Equalf(t, result, reconcile.ResultSuccess, tc.name)
58 } else {
59 require.Equalf(t, result, reconcile.ResultRequeue, tc.name)
60 }
61 if !tc.folderExists {
62 return
63 }
64 empty, err := folderIsEmpty(dhcpPath)
65 require.NoErrorf(t, err, tc.name)
66 require.Truef(t, empty, tc.name)
67 })
68 }
69 }
70
71 func folderIsEmpty(name string) (bool, error) {
72 f, err := os.Open(name)
73 if err != nil {
74 return false, err
75 }
76 defer f.Close()
77 _, err = f.Readdirnames(1)
78 if errors.Is(err, io.EOF) {
79 return true, nil
80 }
81 return false, err
82 }
83
View as plain text