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 }