...

Source file src/edge-infra.dev/pkg/sds/ien/k8s/controllers/pxe/provisioner_test.go

Documentation: edge-infra.dev/pkg/sds/ien/k8s/controllers/pxe

     1  package pxe
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/suite"
     9  	ctrl "sigs.k8s.io/controller-runtime"
    10  
    11  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  	"k8s.io/apimachinery/pkg/types"
    13  
    14  	"edge-infra.dev/pkg/k8s/runtime/controller"
    15  	"edge-infra.dev/pkg/lib/logging"
    16  	v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
    17  	"edge-infra.dev/test"
    18  	"edge-infra.dev/test/framework"
    19  	"edge-infra.dev/test/framework/integration"
    20  	"edge-infra.dev/test/framework/k8s"
    21  	"edge-infra.dev/test/framework/k8s/envtest"
    22  )
    23  
    24  var (
    25  	componentName = "pxe-controller"
    26  	frameworkName = "pxe-controller"
    27  	ienodeName    = "edge-worker"
    28  )
    29  
    30  type UnitTestSuite struct {
    31  	*framework.Framework
    32  	*k8s.K8s
    33  	ctx context.Context
    34  	*v1ien.IENode
    35  }
    36  
    37  type IntegrationTestSuite struct {
    38  	*framework.Framework
    39  	*k8s.K8s
    40  	ctx context.Context
    41  	*v1ien.IENode
    42  }
    43  
    44  func TestMain(m *testing.M) {
    45  	framework.HandleFlags()
    46  	// instantiate test logger
    47  	ctrl.SetLogger(logging.NewLogger().Logger)
    48  	os.Exit(m.Run())
    49  }
    50  
    51  func TestControllerWithDefaults(t *testing.T) {
    52  	testEnv := envtest.Setup()
    53  	t.Setenv("HOSTNAME", ienodeName)
    54  	t.Setenv("NODE_NAME", ienodeName)
    55  
    56  	mgr, err := createManager(controller.WithCfg(testEnv.Config), controller.WithMetricsAddress("0"))
    57  	test.NoError(err)
    58  
    59  	k := k8s.New(testEnv.Config, k8s.WithCtrlManager(mgr))
    60  	f := framework.New(frameworkName).Component(componentName).Register(k)
    61  
    62  	if integration.IsIntegrationTest() {
    63  		s := IntegrationTestSuite{f, k, context.Background(), IENodeMock()}
    64  		f.Setup(s.applyIENode).Teardown(s.deleteIENode)
    65  		suite.Run(t, &s)
    66  	} else {
    67  		s := UnitTestSuite{f, k, context.Background(), IENodeMock()}
    68  		suite.Run(t, &s)
    69  	}
    70  
    71  	t.Cleanup(func() {
    72  		f.NoError(testEnv.Stop())
    73  	})
    74  }
    75  
    76  func (s *UnitTestSuite) TestIENodeCreate() {
    77  	ienode := IENodeMock()
    78  	s.Framework.NoError(s.K8s.Client.Create(s.ctx, ienode))
    79  
    80  	ienodeReturn := v1ien.IENode{}
    81  	err := s.K8s.Client.Get(s.ctx, types.NamespacedName{
    82  		Name: ienode.GetName(),
    83  	}, &ienodeReturn)
    84  
    85  	s.Framework.Assertions.Equal(ienode.Spec, ienodeReturn.Spec)
    86  	s.Framework.NoError(err)
    87  }
    88  
    89  func IENodeMock() *v1ien.IENode {
    90  	return &v1ien.IENode{
    91  		ObjectMeta: metav1.ObjectMeta{
    92  			Name: ienodeName,
    93  		},
    94  		Spec: v1ien.IENodeSpec{
    95  			Role: "worker",
    96  			Lane: "1",
    97  			Network: []v1ien.Network{
    98  				{
    99  					MacAddress: "90:74:c2:0f:d8:77",
   100  					Addresses:  make([]string, 0),
   101  					Gateway4:   "192.168.1.1",
   102  					DHCP4:      false,
   103  					DHCP6:      false,
   104  				},
   105  			},
   106  			PrimaryInterface: &v1ien.PrimaryInterface{
   107  				InterfaceID:  "9647e74f-aba3-447f-b327-31ecce7f8d4c",
   108  				MacAddresses: []string{"90:74:c2:0f:d8:77"},
   109  			},
   110  		},
   111  	}
   112  }
   113  
   114  func (s *IntegrationTestSuite) applyIENode(_ *framework.Framework) {
   115  	if err := s.K8s.Client.Create(s.ctx, s.IENode); err != nil {
   116  		s.Framework.FailNow("failed to apply IENode object", err)
   117  	}
   118  }
   119  
   120  func (s *IntegrationTestSuite) deleteIENode(_ *framework.Framework) {
   121  	if err := s.K8s.Client.Delete(s.ctx, &v1ien.IENode{ObjectMeta: metav1.ObjectMeta{
   122  		Name: s.IENode.Name,
   123  	}}); err != nil {
   124  		s.Framework.FailNow("failed to cleanup IENode object", err)
   125  	}
   126  }
   127  

View as plain text