...

Source file src/edge-infra.dev/pkg/sds/patching/patchmanager/patchmanager_test.go

Documentation: edge-infra.dev/pkg/sds/patching/patchmanager

     1  package patchmanager
     2  
     3  import (
     4  	"io/fs"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/go-logr/logr"
     9  
    10  	"edge-infra.dev/pkg/lib/logging"
    11  	"edge-infra.dev/pkg/sds/patching/common"
    12  	"edge-infra.dev/pkg/sds/patching/test"
    13  )
    14  
    15  // If both vars are zero-value, returns true.
    16  func TestContains(t *testing.T) {
    17  	scenarios := []struct {
    18  		inputNodeList []string
    19  		inputNodeName string
    20  		expect        bool
    21  	}{
    22  		{inputNodeList: []string{"s1-master-1", "s1-worker-2", "s1-worker-3"}, inputNodeName: "s1-master-1", expect: true},
    23  		{inputNodeList: []string{"s1-master-1", "s1-worker-2", "s1-worker-3"}, inputNodeName: "s1-worker-9", expect: false},
    24  	}
    25  
    26  	for _, s := range scenarios {
    27  		got := Contains(s.inputNodeList, s.inputNodeName)
    28  		if got != s.expect {
    29  			t.Errorf("Unexpected result with the node list %v and node name %s. Wanted: %t; Got: %t\n", s.inputNodeList, s.inputNodeName, s.expect, got)
    30  		}
    31  	}
    32  }
    33  
    34  func TestGeneratePatchingEnv(t *testing.T) {
    35  	scenarios := []struct {
    36  		currentVer, targetVer string
    37  		cfg                   common.Config
    38  		expect                string
    39  	}{
    40  		{
    41  			currentVer: "v1.10.2",
    42  			targetVer:  "v1.11.0",
    43  			cfg:        test.NewConfig(t),
    44  			expect:     "CURRENT='v1.10.2'\nTARGET='v1.11.0'\n",
    45  		},
    46  	}
    47  
    48  	for _, s := range scenarios {
    49  		if err := test.CreateFileTree(s.cfg); err != nil {
    50  			t.Errorf("unable to create file tree: %s", err)
    51  		}
    52  
    53  		if err := generatePatchingEnv(s.currentVer, s.targetVer, s.cfg.EnvFilePath); err != nil {
    54  			t.Errorf("%s", err)
    55  		}
    56  
    57  		got, err := os.ReadFile(s.cfg.EnvFilePath)
    58  		if err != nil {
    59  			t.Errorf("error reading patching.env file: %s\n", err)
    60  		}
    61  
    62  		if string(got) != s.expect {
    63  			t.Errorf("error generating patching.env file, invalid file contents: %s", err)
    64  		}
    65  	}
    66  }
    67  
    68  func TestRequestReboot(t *testing.T) {
    69  	scenarios := []struct {
    70  		autoreboot bool
    71  		log        logr.Logger
    72  		cfg        common.Config
    73  		expect     struct {
    74  			name string
    75  			mode fs.FileMode
    76  		}
    77  	}{
    78  		{
    79  			autoreboot: true,
    80  			log:        logging.NewLogger().Logger,
    81  			cfg:        test.NewConfig(t),
    82  			expect: struct {
    83  				name string
    84  				mode fs.FileMode
    85  			}{
    86  				name: "reboot-required",
    87  				mode: os.FileMode(0755),
    88  			},
    89  		},
    90  		{
    91  			autoreboot: false,
    92  			log:        logging.NewLogger().Logger,
    93  			cfg:        test.NewConfig(t),
    94  			expect: struct {
    95  				name string
    96  				mode fs.FileMode
    97  			}{
    98  				name: "reboot-required",
    99  				mode: os.FileMode(0755),
   100  			},
   101  		},
   102  	}
   103  
   104  	for _, s := range scenarios {
   105  		if err := requestReboot(s.autoreboot, s.log, s.cfg); err != nil {
   106  			t.Errorf("%s", err)
   107  		}
   108  
   109  		if !s.autoreboot {
   110  			continue
   111  		}
   112  
   113  		got, err := os.Stat(s.cfg.RebootPath)
   114  		if err != nil {
   115  			t.Errorf("error reading patching.env file: %s\n", err)
   116  		}
   117  
   118  		if got.Name() != s.expect.name {
   119  			t.Errorf("error generating reboot-required file, invalid file name: %s", err)
   120  		}
   121  
   122  		if got.Mode() != s.expect.mode {
   123  			t.Errorf("error generating reboot-required file, invalid file permissions: %s", err)
   124  		}
   125  	}
   126  }
   127  

View as plain text