github.com/jenkins-x/jx/v2@v2.1.155/pkg/cloud/factory/factory_test.go (about)

     1  // +build unit
     2  
     3  package factory
     4  
     5  import (
     6  	"io/ioutil"
     7  	"path"
     8  	"testing"
     9  
    10  	"github.com/ghodss/yaml"
    11  	v1 "github.com/jenkins-x/jx-api/pkg/apis/jenkins.io/v1"
    12  	"github.com/jenkins-x/jx-api/pkg/client/clientset/versioned"
    13  	"github.com/jenkins-x/jx/v2/pkg/cloud"
    14  	amazonStorage "github.com/jenkins-x/jx/v2/pkg/cloud/amazon/storage"
    15  	"github.com/jenkins-x/jx/v2/pkg/cloud/buckets"
    16  	"github.com/jenkins-x/jx/v2/pkg/cloud/gke/storage"
    17  	"github.com/jenkins-x/jx/v2/pkg/cmd/clients"
    18  	"github.com/jenkins-x/jx/v2/pkg/cmd/clients/fake"
    19  	"github.com/jenkins-x/jx/v2/pkg/config"
    20  	"github.com/jenkins-x/jx/v2/pkg/util"
    21  	"github.com/stretchr/testify/assert"
    22  	v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
    23  )
    24  
    25  func TestNewBucketProviderFromTeamSettingsConfiguration(t *testing.T) {
    26  	var fac clients.Factory
    27  	fac = &fake.FakeFactory{}
    28  	jxClient, ns, err := fac.CreateJXClient()
    29  	assert.NoError(t, err)
    30  
    31  	requirementsYamlFile := path.Join("test_data", "jx-requirements.yml")
    32  	exists, err := util.FileExists(requirementsYamlFile)
    33  	assert.NoError(t, err)
    34  	assert.True(t, exists)
    35  
    36  	bytes, err := ioutil.ReadFile(requirementsYamlFile)
    37  	assert.NoError(t, err)
    38  	requirements := &config.RequirementsConfig{}
    39  	err = yaml.Unmarshal(bytes, requirements)
    40  	assert.NoError(t, err)
    41  
    42  	_, err = jxClient.JenkinsV1().Environments(ns).Create(&v1.Environment{
    43  		ObjectMeta: v12.ObjectMeta{
    44  			Name: "dev",
    45  		},
    46  		Spec: v1.EnvironmentSpec{
    47  			TeamSettings: v1.TeamSettings{
    48  				BootRequirements: string(bytes),
    49  			},
    50  		},
    51  	})
    52  	assert.NoError(t, err)
    53  
    54  	testCases := []struct {
    55  		provider     string
    56  		providerType buckets.Provider
    57  	}{
    58  		{
    59  			provider:     cloud.GKE,
    60  			providerType: &storage.GKEBucketProvider{},
    61  		},
    62  		{
    63  			provider:     cloud.AWS,
    64  			providerType: &amazonStorage.AmazonBucketProvider{},
    65  		},
    66  		{
    67  			provider:     cloud.EKS,
    68  			providerType: &amazonStorage.AmazonBucketProvider{},
    69  		},
    70  		{
    71  			provider:     "NonSupportedProvider",
    72  			providerType: &buckets.LegacyBucketProvider{},
    73  		},
    74  	}
    75  	for _, tt := range testCases {
    76  		t.Run(tt.provider, func(t *testing.T) {
    77  			requirements.Cluster.Provider = tt.provider
    78  			err = updateDevEnvironment(jxClient, ns, requirements)
    79  			assert.NoError(t, err)
    80  			pro, err := NewBucketProviderFromTeamSettingsConfiguration(fac)
    81  			assert.NoError(t, err)
    82  			assert.IsType(t, tt.providerType, pro)
    83  		})
    84  	}
    85  }
    86  func TestNewBucketProviderFromTeamSettingsConfigurationOrDefault(t *testing.T) {
    87  	var fac clients.Factory
    88  	fac = &fake.FakeFactory{}
    89  	jxClient, ns, err := fac.CreateJXClient()
    90  	assert.NoError(t, err)
    91  
    92  	_, err = jxClient.JenkinsV1().Environments(ns).Create(&v1.Environment{
    93  		ObjectMeta: v12.ObjectMeta{
    94  			Name: "dev",
    95  		},
    96  		Spec: v1.EnvironmentSpec{
    97  			TeamSettings: v1.TeamSettings{},
    98  		},
    99  	})
   100  	assert.NoError(t, err)
   101  
   102  	provider, err := NewBucketProviderFromTeamSettingsConfigurationOrDefault(fac, v1.StorageLocation{
   103  		Classifier: "logs",
   104  		BucketURL:  "file://bucketname",
   105  	})
   106  	assert.NoError(t, err)
   107  
   108  	assert.IsType(t, &buckets.LegacyBucketProvider{}, provider)
   109  }
   110  
   111  func updateDevEnvironment(jxClient versioned.Interface, ns string, requirements *config.RequirementsConfig) error {
   112  	bytes, err := yaml.Marshal(requirements)
   113  	if err != nil {
   114  		return err
   115  	}
   116  	_, err = jxClient.JenkinsV1().Environments(ns).PatchUpdate(&v1.Environment{
   117  		ObjectMeta: v12.ObjectMeta{
   118  			Name: "dev",
   119  		},
   120  		Spec: v1.EnvironmentSpec{
   121  			TeamSettings: v1.TeamSettings{
   122  				BootRequirements: string(bytes),
   123  			},
   124  		},
   125  	})
   126  	return err
   127  }