...

Source file src/edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/dhclient/dhclient_test.go

Documentation: edge-infra.dev/pkg/sds/ien/k8s/controllers/nodeagent/plugins/networking/dhclient

     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 // if true should also set folderExists to true
    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