github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/boom/bundle/bundle_test.go (about)

     1  package bundle
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/caos/orbos/internal/operator/boom/api/v1beta1"
     7  	application "github.com/caos/orbos/internal/operator/boom/application/mock"
     8  	"github.com/caos/orbos/internal/operator/boom/bundle/bundles"
     9  	"github.com/caos/orbos/internal/operator/boom/bundle/config"
    10  	"github.com/caos/orbos/internal/operator/boom/name"
    11  	"github.com/caos/orbos/internal/operator/boom/templator/yaml"
    12  	"github.com/caos/orbos/internal/utils/clientgo"
    13  	"github.com/caos/orbos/internal/utils/helper"
    14  	"github.com/caos/orbos/mntr"
    15  	"github.com/stretchr/testify/assert"
    16  	_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
    17  
    18  	yamlv3 "gopkg.in/yaml.v3"
    19  
    20  	"testing"
    21  )
    22  
    23  const (
    24  	baseDirectoryPath       = "../../tools"
    25  	dashboardsDirectoryPath = "../../dashboards"
    26  )
    27  
    28  var (
    29  	testHelperResource = &helper.Resource{
    30  		Kind:       "test",
    31  		ApiVersion: "test/v1",
    32  		Metadata: &helper.Metadata{
    33  			Name:      "test",
    34  			Namespace: "test",
    35  		},
    36  	}
    37  	testClientgoResource = &clientgo.Resource{
    38  		Group:     "test",
    39  		Version:   "v1",
    40  		Resource:  "test",
    41  		Kind:      "test",
    42  		Name:      "test",
    43  		Namespace: "test",
    44  		Labels:    map[string]string{"test": "test"},
    45  	}
    46  )
    47  
    48  func newMonitor() mntr.Monitor {
    49  	monitor := mntr.Monitor{
    50  		OnInfo:   mntr.LogMessage,
    51  		OnChange: mntr.LogMessage,
    52  		OnError:  mntr.LogError,
    53  	}
    54  
    55  	return monitor
    56  }
    57  
    58  func NewBundle(templator name.Templator) *Bundle {
    59  	monitor := newMonitor()
    60  
    61  	bundleConf := &config.Config{
    62  		Monitor:           monitor,
    63  		Orb:               "testsuite",
    64  		CrdName:           "caos_test",
    65  		BaseDirectoryPath: baseDirectoryPath,
    66  		Templator:         templator,
    67  	}
    68  
    69  	b := New(bundleConf)
    70  	return b
    71  }
    72  
    73  func init() {
    74  	Testmode = true
    75  }
    76  
    77  func TestBundle_EmptyApplicationList(t *testing.T) {
    78  	b := NewBundle(yaml.GetName())
    79  	eqApps := b.GetApplications()
    80  	assert.Zero(t, len(eqApps))
    81  }
    82  
    83  func TestBundle_AddApplicationsByBundleName(t *testing.T) {
    84  	b := NewBundle(yaml.GetName())
    85  
    86  	//Add basisset
    87  	err := b.AddApplicationsByBundleName(bundles.Caos)
    88  	assert.NoError(t, err)
    89  	apps := bundles.GetCaos()
    90  
    91  	eqApps := b.GetApplications()
    92  	assert.Equal(t, len(eqApps), len(apps))
    93  	for eqApp := range eqApps {
    94  		assert.Contains(t, apps, eqApp)
    95  	}
    96  }
    97  
    98  func TestBundle_AddApplicationsByBundleName_nonexistent(t *testing.T) {
    99  	b := NewBundle(yaml.GetName())
   100  	var nonexistent name.Bundle
   101  	nonexistent = "nonexistent"
   102  	err := b.AddApplicationsByBundleName(nonexistent)
   103  	assert.Error(t, err)
   104  	eqApps := b.GetApplications()
   105  	assert.Equal(t, 0, len(eqApps))
   106  }
   107  func TestBundle_AddApplication(t *testing.T) {
   108  	b := NewBundle(yaml.GetName())
   109  
   110  	spec := &v1beta1.ToolsetSpec{}
   111  	app := application.NewTestYAMLApplication(t)
   112  
   113  	out, _ := yamlv3.Marshal(testHelperResource)
   114  	app.SetDeploy(spec, true).SetGetYaml(spec, string(out))
   115  
   116  	b.AddApplication(app.Application())
   117  
   118  	apps := b.GetApplications()
   119  	assert.Equal(t, 1, len(apps))
   120  }
   121  
   122  func TestBundle_AddApplication_AlreadyAdded(t *testing.T) {
   123  	b := NewBundle(yaml.GetName())
   124  
   125  	spec := &v1beta1.ToolsetSpec{}
   126  	app := application.NewTestYAMLApplication(t)
   127  
   128  	out, _ := yamlv3.Marshal(testHelperResource)
   129  	app.SetDeploy(spec, true).SetGetYaml(spec, string(out))
   130  
   131  	err := b.AddApplication(app.Application())
   132  	assert.NoError(t, err)
   133  
   134  	apps := b.GetApplications()
   135  	assert.Equal(t, 1, len(apps))
   136  
   137  	err2 := b.AddApplication(app.Application())
   138  	assert.Error(t, err2)
   139  
   140  }
   141  
   142  func TestBundle_ReconcileApplication(t *testing.T) {
   143  	b := NewBundle(yaml.GetName())
   144  
   145  	spec := &v1beta1.ToolsetSpec{}
   146  	app := application.NewTestYAMLApplication(t)
   147  
   148  	out, _ := yamlv3.Marshal(testHelperResource)
   149  	app.SetDeploy(spec, true).SetGetYaml(spec, string(out))
   150  
   151  	b.AddApplication(app.Application())
   152  
   153  	resources := []*clientgo.Resource{testClientgoResource}
   154  
   155  	var wg sync.WaitGroup
   156  	wg.Add(1)
   157  	errChan := make(chan error)
   158  	go b.ReconcileApplication(resources, app.Application().GetName(), spec, &wg, errChan)
   159  	assert.NoError(t, <-errChan)
   160  }
   161  
   162  func TestBundle_ReconcileApplication_nonexistent(t *testing.T) {
   163  	b := NewBundle(yaml.GetName())
   164  
   165  	spec := &v1beta1.ToolsetSpec{}
   166  	app := application.NewTestYAMLApplication(t)
   167  
   168  	out, _ := yamlv3.Marshal(testHelperResource)
   169  	app.SetDeploy(spec, true).SetGetYaml(spec, string(out))
   170  
   171  	resources := []*clientgo.Resource{}
   172  
   173  	var wg sync.WaitGroup
   174  	wg.Add(1)
   175  	errChan := make(chan error)
   176  	go b.ReconcileApplication(resources, app.Application().GetName(), nil, &wg, errChan)
   177  	assert.Error(t, <-errChan)
   178  }
   179  
   180  func TestBundle_Reconcile(t *testing.T) {
   181  	b := NewBundle(yaml.GetName())
   182  
   183  	spec := &v1beta1.ToolsetSpec{}
   184  	app := application.NewTestYAMLApplication(t)
   185  
   186  	out, _ := yamlv3.Marshal(testHelperResource)
   187  	app.SetDeploy(spec, true).SetGetYaml(spec, string(out))
   188  	b.AddApplication(app.Application())
   189  
   190  	resources := []*clientgo.Resource{}
   191  
   192  	err := b.Reconcile(resources, spec)
   193  	assert.NoError(t, err)
   194  }
   195  
   196  func TestBundle_Reconcile_NoApplications(t *testing.T) {
   197  	b := NewBundle(yaml.GetName())
   198  
   199  	spec := &v1beta1.ToolsetSpec{}
   200  	resources := []*clientgo.Resource{}
   201  	err := b.Reconcile(resources, spec)
   202  	assert.NoError(t, err)
   203  }