github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/container/containerv1/alb_test.go (about)

     1  package containerv1
     2  
     3  import (
     4  	"log"
     5  	"net/http"
     6  
     7  	bluemix "github.com/IBM-Cloud/bluemix-go"
     8  	"github.com/IBM-Cloud/bluemix-go/client"
     9  	bluemixHttp "github.com/IBM-Cloud/bluemix-go/http"
    10  	"github.com/IBM-Cloud/bluemix-go/session"
    11  
    12  	"github.com/onsi/gomega/ghttp"
    13  
    14  	. "github.com/onsi/ginkgo"
    15  	. "github.com/onsi/gomega"
    16  )
    17  
    18  var _ = Describe("Albs", func() {
    19  	var server *ghttp.Server
    20  
    21  	updatePolicy := ALBUpdatePolicy{AutoUpdate: true, LatestVersion: true}
    22  	AfterEach(func() {
    23  		server.Close()
    24  	})
    25  	//CreateALB
    26  	Describe("Create", func() {
    27  		Context("When alb is created", func() {
    28  			BeforeEach(func() {
    29  				server = ghttp.NewServer()
    30  				server.AppendHandlers(
    31  					ghttp.CombineHandlers(
    32  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/clusters/testCluster/zone/testZone"),
    33  						ghttp.VerifyJSON(`{"zone":"testZone","vlanID":"testVlan","type":"testType","enableByDefault":true,"ip":"1.2.3.4","nlbVersion":"testnlbVersion","ingressImage":"testingressImage"}`),
    34  						ghttp.RespondWith(http.StatusCreated, `{"alb":"1234", "cluster":"clusterID"}`),
    35  					),
    36  				)
    37  			})
    38  
    39  			It("should create an alb to a cluster", func() {
    40  				target := ClusterTargetHeader{
    41  					OrgID:     "abc",
    42  					SpaceID:   "def",
    43  					AccountID: "ghi",
    44  					Region:    "eu-de",
    45  				}
    46  				params := CreateALB{
    47  					Zone: "testZone", VlanID: "testVlan", Type: "testType", EnableByDefault: true, IP: "1.2.3.4", NLBVersion: "testnlbVersion", IngressImage: "testingressImage",
    48  				}
    49  
    50  				AlbResp, err := newAlbs(server.URL()).CreateALB(params, "testCluster", target)
    51  				Expect(AlbResp.Alb).To(Equal("1234"))
    52  				Expect(AlbResp.Cluster).To(Equal("clusterID"))
    53  				Expect(err).NotTo(HaveOccurred())
    54  			})
    55  		})
    56  		Context("When creating alb is unsuccessful", func() {
    57  			BeforeEach(func() {
    58  				server = ghttp.NewServer()
    59  				server.SetAllowUnhandledRequests(true)
    60  				server.AppendHandlers(
    61  					ghttp.CombineHandlers(
    62  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/clusters/testCluster/zone/testZone"),
    63  						ghttp.VerifyJSON(`{"zone":"testZone","vlanID":"testVlan","type":"testType","enableByDefault":true,"ip":"1.2.3.4","nlbVersion":"testnlbVersion","ingressImage":"testingressImage"}`),
    64  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to configure alb`),
    65  					),
    66  				)
    67  			})
    68  
    69  			It("should return error during creation of alb", func() {
    70  				params := CreateALB{
    71  					Zone: "testZone", VlanID: "testVlan", Type: "testType", EnableByDefault: true, IP: "1.2.3.4", NLBVersion: "testnlbVersion", IngressImage: "testingressImage",
    72  				}
    73  				target := ClusterTargetHeader{
    74  					OrgID:     "abc",
    75  					SpaceID:   "def",
    76  					AccountID: "ghi",
    77  					Region:    "eu-de",
    78  				}
    79  				_, err := newAlbs(server.URL()).CreateALB(params, "testCluster", target)
    80  				Expect(err).To(HaveOccurred())
    81  			})
    82  		})
    83  	})
    84  
    85  	//Configure
    86  	Describe("Configure", func() {
    87  		Context("When configuring alb is successful", func() {
    88  			BeforeEach(func() {
    89  				server = ghttp.NewServer()
    90  				server.AppendHandlers(
    91  					ghttp.CombineHandlers(
    92  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/albs"),
    93  						ghttp.VerifyJSON(`{"albID":"123","clusterID":"345","name":"test","albType":"public","enable":true,"state":"active","createdDate":"","numOfInstances":"1","resize":false,"albip":"169.0.0.1","zone": "ams03","disableDeployment":false,"albBuild":"1.1.1_123","vlanID":"12345","status":"healthy"}`),
    94  						ghttp.RespondWith(http.StatusCreated, `{}`),
    95  					),
    96  				)
    97  			})
    98  
    99  			It("should configure alb to a cluster", func() {
   100  				target := ClusterTargetHeader{
   101  					OrgID:     "abc",
   102  					SpaceID:   "def",
   103  					AccountID: "ghi",
   104  					Region:    "eu-de",
   105  				}
   106  				params := ALBConfig{
   107  					ALBID: "123", ClusterID: "345", Name: "test", ALBType: "public", Enable: true, State: "active", CreatedDate: "", NumOfInstances: "1", Resize: false, ALBIP: "169.0.0.1", Zone: "ams03", DisableDeployment: false, VlanID: "12345", ALBBuild: "1.1.1_123", Status: "healthy",
   108  				}
   109  				err := newAlbs(server.URL()).ConfigureALB("123", params, false, target)
   110  				Expect(err).NotTo(HaveOccurred())
   111  			})
   112  		})
   113  		Context("When configuring alb is unsuccessful", func() {
   114  			BeforeEach(func() {
   115  				server = ghttp.NewServer()
   116  				server.SetAllowUnhandledRequests(true)
   117  				server.AppendHandlers(
   118  					ghttp.CombineHandlers(
   119  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/albs"),
   120  						ghttp.VerifyJSON(`{"albID":"123","clusterID":"345","name":"test","albType":"public","enable":true,"state":"active","createdDate":"","numOfInstances":"1","resize":false,"albip":"169.0.0.1","zone": "ams03","disableDeployment":false,"albBuild":"1.1.1_123","vlanID":"12345","status":"healthy"}
   121  `),
   122  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to configure alb`),
   123  					),
   124  				)
   125  			})
   126  
   127  			It("should return error during configuring alb", func() {
   128  				params := ALBConfig{
   129  					ALBID: "123", ClusterID: "345", Name: "test", ALBType: "public", Enable: true, State: "active", CreatedDate: "", NumOfInstances: "1", Resize: false, ALBIP: "169.0.0.1", Zone: "ams03", DisableDeployment: false, VlanID: "12345", ALBBuild: "1.1.1_123", Status: "healthy",
   130  				}
   131  				target := ClusterTargetHeader{
   132  					OrgID:     "abc",
   133  					SpaceID:   "def",
   134  					AccountID: "ghi",
   135  					Region:    "eu-de",
   136  				}
   137  				err := newAlbs(server.URL()).ConfigureALB("123", params, false, target)
   138  				Expect(err).To(HaveOccurred())
   139  			})
   140  		})
   141  	})
   142  
   143  	//ListClusterALBs
   144  	Describe("List cluster albs", func() {
   145  		Context("When read of cluster albs is successful", func() {
   146  			BeforeEach(func() {
   147  				server = ghttp.NewServer()
   148  				server.AppendHandlers(
   149  					ghttp.CombineHandlers(
   150  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test"),
   151  						ghttp.RespondWith(http.StatusOK, `
   152  						  {
   153  						    "alb": [
   154  						      {
   155  						        "albID": "string",
   156  						        "albType": "string",
   157  						        "albip": "string",
   158  						        "clusterID": "string",
   159  						        "createdDate": "string",
   160  						        "enable": true,
   161  						        "name": "string",
   162  						        "numOfInstances": "string",
   163  						        "resize": true,
   164  						        "state": "string",
   165  						        "zone": "string",
   166  						        "disableDeployment":false
   167  						      }
   168  						    ],
   169  						    "dataCenter": "string",
   170  						    "id": "string",
   171  						    "ingressHostname": "string",
   172  						    "ingressSecretName": "string",
   173  						    "isPaid": true,
   174  						    "region": "string"
   175  						  }
   176  						`),
   177  					),
   178  				)
   179  			})
   180  
   181  			It("should return cluster albs list", func() {
   182  				target := ClusterTargetHeader{
   183  					OrgID:     "abc",
   184  					SpaceID:   "def",
   185  					AccountID: "ghi",
   186  					Region:    "eu-de",
   187  				}
   188  				albs, err := newAlbs(server.URL()).ListClusterALBs("test", target)
   189  				Expect(albs).ShouldNot(BeNil())
   190  				Expect(err).NotTo(HaveOccurred())
   191  			})
   192  		})
   193  		Context("When read of cluster albs is unsuccessful", func() {
   194  			BeforeEach(func() {
   195  				server = ghttp.NewServer()
   196  				server.SetAllowUnhandledRequests(true)
   197  				server.AppendHandlers(
   198  					ghttp.CombineHandlers(
   199  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test"),
   200  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve albs`),
   201  					),
   202  				)
   203  			})
   204  
   205  			It("should return error when cluster albs are retrieved", func() {
   206  				target := ClusterTargetHeader{
   207  					OrgID:     "abc",
   208  					SpaceID:   "def",
   209  					AccountID: "ghi",
   210  					Region:    "eu-de",
   211  				}
   212  				albs, err := newAlbs(server.URL()).ListClusterALBs("test", target)
   213  				Expect(err).To(HaveOccurred())
   214  				Expect(albs).Should(BeNil())
   215  			})
   216  		})
   217  	})
   218  	//GetAlb
   219  	Describe("Get cluster alb", func() {
   220  		Context("When read of cluster alb is successful", func() {
   221  			BeforeEach(func() {
   222  				server = ghttp.NewServer()
   223  				server.AppendHandlers(
   224  					ghttp.CombineHandlers(
   225  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/albs/testAlb"),
   226  						ghttp.RespondWith(http.StatusOK, `{"albID":"123","clusterID":"345","name":"test","albType":"public","enable":true,"state":"active","createdDate":"","numOfInstances":"1","resize":false,"albip":"169.0.0.1","zone": "ams03","disableDeployment":false}`),
   227  					),
   228  				)
   229  			})
   230  
   231  			It("should return albs", func() {
   232  				target := ClusterTargetHeader{
   233  					OrgID:     "abc",
   234  					SpaceID:   "def",
   235  					AccountID: "ghi",
   236  					Region:    "eu-de",
   237  				}
   238  				alb, err := newAlbs(server.URL()).GetALB("testAlb", target)
   239  				Expect(alb).ShouldNot(BeNil())
   240  				Expect(err).NotTo(HaveOccurred())
   241  			})
   242  		})
   243  		Context("When read of cluster alb is unsuccessful", func() {
   244  			BeforeEach(func() {
   245  				server = ghttp.NewServer()
   246  				server.SetAllowUnhandledRequests(true)
   247  				server.AppendHandlers(
   248  					ghttp.CombineHandlers(
   249  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/albs/testAlb"),
   250  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve alb.`),
   251  					),
   252  				)
   253  			})
   254  
   255  			It("should return error when alb are retrieved", func() {
   256  				target := ClusterTargetHeader{
   257  					OrgID:     "abc",
   258  					SpaceID:   "def",
   259  					AccountID: "ghi",
   260  					Region:    "eu-de",
   261  				}
   262  				_, err := newAlbs(server.URL()).GetALB("testAlb", target)
   263  				Expect(err).To(HaveOccurred())
   264  			})
   265  		})
   266  	})
   267  	//Deploy Alb cert
   268  	Describe("Deploy Alb cert", func() {
   269  		Context("When deploying alb cert is successful", func() {
   270  			BeforeEach(func() {
   271  				server = ghttp.NewServer()
   272  				server.AppendHandlers(
   273  					ghttp.CombineHandlers(
   274  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/albsecrets"),
   275  						ghttp.VerifyJSON(`{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}
   276  `),
   277  						ghttp.RespondWith(http.StatusCreated, `{}`),
   278  					),
   279  				)
   280  			})
   281  
   282  			It("should deploy alb to a cluster", func() {
   283  				params := ALBSecretConfig{
   284  					SecretName: "test", ClusterID: "345", DomainName: "testDomain", CloudCertInstanceID: "456", ClusterCrn: "crn::cluster", CertCrn: "crn::cert", IssuerName: "testissue", ExpiresOn: "", State: "active",
   285  				}
   286  				target := ClusterTargetHeader{
   287  					OrgID:     "abc",
   288  					SpaceID:   "def",
   289  					AccountID: "ghi",
   290  					Region:    "eu-de",
   291  				}
   292  				err := newAlbs(server.URL()).DeployALBCert(params, target)
   293  				Expect(err).NotTo(HaveOccurred())
   294  			})
   295  		})
   296  		Context("When deploying alb cert is unsuccessful", func() {
   297  			BeforeEach(func() {
   298  				server = ghttp.NewServer()
   299  				server.SetAllowUnhandledRequests(true)
   300  				server.AppendHandlers(
   301  					ghttp.CombineHandlers(
   302  						ghttp.VerifyRequest(http.MethodPost, "/v1/alb/albsecrets"),
   303  						ghttp.VerifyJSON(`{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}
   304  `),
   305  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to deploy alb cert`),
   306  					),
   307  				)
   308  			})
   309  
   310  			It("should return error during deploying alb cert", func() {
   311  				params := ALBSecretConfig{
   312  					SecretName: "test", ClusterID: "345", DomainName: "testDomain", CloudCertInstanceID: "456", ClusterCrn: "crn::cluster", CertCrn: "crn::cert", IssuerName: "testissue", ExpiresOn: "", State: "active",
   313  				}
   314  				target := ClusterTargetHeader{
   315  					OrgID:     "abc",
   316  					SpaceID:   "def",
   317  					AccountID: "ghi",
   318  					Region:    "eu-de",
   319  				}
   320  				err := newAlbs(server.URL()).DeployALBCert(params, target)
   321  				Expect(err).To(HaveOccurred())
   322  			})
   323  		})
   324  	})
   325  	//UpdateALBCert
   326  	Describe("Update Alb cert", func() {
   327  		Context("When updating alb cert is successful", func() {
   328  			BeforeEach(func() {
   329  				server = ghttp.NewServer()
   330  				server.AppendHandlers(
   331  					ghttp.CombineHandlers(
   332  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/albsecrets"),
   333  						ghttp.VerifyJSON(`{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}
   334  `),
   335  						ghttp.RespondWith(http.StatusNoContent, `{}`),
   336  					),
   337  				)
   338  			})
   339  
   340  			It("should deploy alb to a cluster", func() {
   341  				params := ALBSecretConfig{
   342  					SecretName: "test", ClusterID: "345", DomainName: "testDomain", CloudCertInstanceID: "456", ClusterCrn: "crn::cluster", CertCrn: "crn::cert", IssuerName: "testissue", ExpiresOn: "", State: "active",
   343  				}
   344  				target := ClusterTargetHeader{
   345  					OrgID:     "abc",
   346  					SpaceID:   "def",
   347  					AccountID: "ghi",
   348  					Region:    "eu-de",
   349  				}
   350  				err := newAlbs(server.URL()).UpdateALBCert(params, target)
   351  				Expect(err).NotTo(HaveOccurred())
   352  			})
   353  		})
   354  		Context("When deploying alb cert is unsuccessful", func() {
   355  			BeforeEach(func() {
   356  				server = ghttp.NewServer()
   357  				server.SetAllowUnhandledRequests(true)
   358  				server.AppendHandlers(
   359  					ghttp.CombineHandlers(
   360  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/albsecrets"),
   361  						ghttp.VerifyJSON(`{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}
   362  `),
   363  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to update alb cert`),
   364  					),
   365  				)
   366  			})
   367  
   368  			It("should return error during deploying alb cert", func() {
   369  				params := ALBSecretConfig{
   370  					SecretName: "test", ClusterID: "345", DomainName: "testDomain", CloudCertInstanceID: "456", ClusterCrn: "crn::cluster", CertCrn: "crn::cert", IssuerName: "testissue", ExpiresOn: "", State: "active",
   371  				}
   372  				target := ClusterTargetHeader{
   373  					OrgID:     "abc",
   374  					SpaceID:   "def",
   375  					AccountID: "ghi",
   376  					Region:    "eu-de",
   377  				}
   378  				err := newAlbs(server.URL()).UpdateALBCert(params, target)
   379  				Expect(err).To(HaveOccurred())
   380  			})
   381  		})
   382  	})
   383  	//ListALBCerts
   384  	Describe("Get cluster alb certs", func() {
   385  		Context("When read of cluster alb certs is successful", func() {
   386  			BeforeEach(func() {
   387  				server = ghttp.NewServer()
   388  				server.AppendHandlers(
   389  					ghttp.CombineHandlers(
   390  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   391  						ghttp.RespondWith(http.StatusOK, `{"id":"123","region":"eu-de","dataCenter":"ams03","isPaid":true,"albSecrets":[{"secretName":"test","clusterID":"test","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"string","state":"active"}]}`),
   392  					),
   393  				)
   394  			})
   395  
   396  			It("should return cluster alb certs list", func() {
   397  				target := ClusterTargetHeader{
   398  					OrgID:     "abc",
   399  					SpaceID:   "def",
   400  					AccountID: "ghi",
   401  					Region:    "eu-de",
   402  				}
   403  				albCerts, err := newAlbs(server.URL()).ListALBCerts("test", target)
   404  				Expect(albCerts).ShouldNot(BeNil())
   405  				Expect(err).NotTo(HaveOccurred())
   406  			})
   407  		})
   408  		Context("When read of cluster alb certs is unsuccessful", func() {
   409  			BeforeEach(func() {
   410  				server = ghttp.NewServer()
   411  				server.SetAllowUnhandledRequests(true)
   412  				server.AppendHandlers(
   413  					ghttp.CombineHandlers(
   414  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   415  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve alb certs`),
   416  					),
   417  				)
   418  			})
   419  
   420  			It("should return error when cluster alb certss are retrieved", func() {
   421  				target := ClusterTargetHeader{
   422  					OrgID:     "abc",
   423  					SpaceID:   "def",
   424  					AccountID: "ghi",
   425  					Region:    "eu-de",
   426  				}
   427  				albs, err := newAlbs(server.URL()).ListALBCerts("test", target)
   428  				Expect(err).To(HaveOccurred())
   429  				Expect(albs).Should(BeNil())
   430  			})
   431  		})
   432  	})
   433  	//GetClusterALBCertBySecretName
   434  	Describe("Get cluster alb cert", func() {
   435  		Context("When read of cluster alb cert is successful", func() {
   436  			BeforeEach(func() {
   437  				server = ghttp.NewServer()
   438  				server.AppendHandlers(
   439  					ghttp.CombineHandlers(
   440  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   441  						ghttp.RespondWith(http.StatusOK, `{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}`),
   442  					),
   443  				)
   444  			})
   445  
   446  			It("should return albs", func() {
   447  				target := ClusterTargetHeader{
   448  					OrgID:     "abc",
   449  					SpaceID:   "def",
   450  					AccountID: "ghi",
   451  					Region:    "eu-de",
   452  				}
   453  				alb, err := newAlbs(server.URL()).GetClusterALBCertBySecretName("test", "testSecret", target)
   454  				Expect(alb).ShouldNot(BeNil())
   455  				Expect(err).NotTo(HaveOccurred())
   456  			})
   457  		})
   458  		Context("When read of cluster alb cert is unsuccessful", func() {
   459  			BeforeEach(func() {
   460  				server = ghttp.NewServer()
   461  				server.SetAllowUnhandledRequests(true)
   462  				server.AppendHandlers(
   463  					ghttp.CombineHandlers(
   464  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   465  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve alb cert.`),
   466  					),
   467  				)
   468  			})
   469  
   470  			It("should return error when alb cert are retrieved", func() {
   471  				target := ClusterTargetHeader{
   472  					OrgID:     "abc",
   473  					SpaceID:   "def",
   474  					AccountID: "ghi",
   475  					Region:    "eu-de",
   476  				}
   477  				_, err := newAlbs(server.URL()).GetClusterALBCertBySecretName("test", "testSecret", target)
   478  				Expect(err).To(HaveOccurred())
   479  			})
   480  		})
   481  	})
   482  	//GetClusterALBCertByCertCRN
   483  	Describe("Get cluster alb cert", func() {
   484  		Context("When read of cluster alb cert is successful", func() {
   485  			BeforeEach(func() {
   486  				server = ghttp.NewServer()
   487  				server.AppendHandlers(
   488  					ghttp.CombineHandlers(
   489  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   490  						ghttp.RespondWith(http.StatusOK, `{"secretName":"test","clusterID":"345","domainName":"testDomain","cloudCertInstanceID":"456","clusterCrn":"crn::cluster","certCrn":"crn::cert","issuerName":"testissue","expiresOn":"","state":"active"}`),
   491  					),
   492  				)
   493  			})
   494  
   495  			It("should return albs", func() {
   496  				target := ClusterTargetHeader{
   497  					OrgID:     "abc",
   498  					SpaceID:   "def",
   499  					AccountID: "ghi",
   500  					Region:    "eu-de",
   501  				}
   502  				alb, err := newAlbs(server.URL()).GetClusterALBCertByCertCRN("test", "testCert", target)
   503  				Expect(alb).ShouldNot(BeNil())
   504  				Expect(err).NotTo(HaveOccurred())
   505  			})
   506  		})
   507  		Context("When read of cluster alb cert is unsuccessful", func() {
   508  			BeforeEach(func() {
   509  				server = ghttp.NewServer()
   510  				server.SetAllowUnhandledRequests(true)
   511  				server.AppendHandlers(
   512  					ghttp.CombineHandlers(
   513  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/test/albsecrets"),
   514  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve alb cert.`),
   515  					),
   516  				)
   517  			})
   518  
   519  			It("should return error when alb cert are retrieved", func() {
   520  				target := ClusterTargetHeader{
   521  					OrgID:     "abc",
   522  					SpaceID:   "def",
   523  					AccountID: "ghi",
   524  					Region:    "eu-de",
   525  				}
   526  				_, err := newAlbs(server.URL()).GetClusterALBCertByCertCRN("test", "testCert", target)
   527  				Expect(err).To(HaveOccurred())
   528  			})
   529  		})
   530  	})
   531  	//RemoveALB
   532  	Describe("Delete", func() {
   533  		Context("When delete of alb is successful", func() {
   534  			BeforeEach(func() {
   535  				server = ghttp.NewServer()
   536  				server.AppendHandlers(
   537  					ghttp.CombineHandlers(
   538  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/albs/test"),
   539  						ghttp.RespondWith(http.StatusOK, `{							
   540  						}`),
   541  					),
   542  				)
   543  			})
   544  
   545  			It("should delete alb", func() {
   546  				target := ClusterTargetHeader{
   547  					OrgID:     "abc",
   548  					SpaceID:   "def",
   549  					AccountID: "ghi",
   550  					Region:    "eu-de",
   551  				}
   552  
   553  				err := newAlbs(server.URL()).RemoveALB("test", target)
   554  				Expect(err).NotTo(HaveOccurred())
   555  			})
   556  		})
   557  		Context("When alb delete is failed", func() {
   558  			BeforeEach(func() {
   559  				server = ghttp.NewServer()
   560  				server.SetAllowUnhandledRequests(true)
   561  				server.AppendHandlers(
   562  					ghttp.CombineHandlers(
   563  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/albs/test"),
   564  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to delete alb`),
   565  					),
   566  				)
   567  			})
   568  
   569  			It("should return error alb delete", func() {
   570  				target := ClusterTargetHeader{
   571  					OrgID:     "abc",
   572  					SpaceID:   "def",
   573  					AccountID: "ghi",
   574  					Region:    "eu-de",
   575  				}
   576  				err := newAlbs(server.URL()).RemoveALB("test", target)
   577  				Expect(err).To(HaveOccurred())
   578  			})
   579  		})
   580  	})
   581  	//RemoveALBCertBySecretName
   582  	Describe("Delete", func() {
   583  		Context("When delete of alb cert is successful", func() {
   584  			BeforeEach(func() {
   585  				server = ghttp.NewServer()
   586  				server.AppendHandlers(
   587  					ghttp.CombineHandlers(
   588  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/clusters/mycluster/albsecrets"),
   589  						ghttp.RespondWith(http.StatusOK, `{							
   590  						}`),
   591  					),
   592  				)
   593  			})
   594  
   595  			It("should delete alb cert", func() {
   596  				target := ClusterTargetHeader{
   597  					OrgID:     "abc",
   598  					SpaceID:   "def",
   599  					AccountID: "ghi",
   600  					Region:    "eu-de",
   601  				}
   602  				err := newAlbs(server.URL()).RemoveALBCertBySecretName("mycluster", "test", target)
   603  				Expect(err).NotTo(HaveOccurred())
   604  			})
   605  		})
   606  		Context("When alb cert delete is failed", func() {
   607  			BeforeEach(func() {
   608  				server = ghttp.NewServer()
   609  				server.SetAllowUnhandledRequests(true)
   610  				server.AppendHandlers(
   611  					ghttp.CombineHandlers(
   612  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/clusters/mycluster/albsecrets"),
   613  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to delete alb`),
   614  					),
   615  				)
   616  			})
   617  
   618  			It("should return error alb cert delete", func() {
   619  				target := ClusterTargetHeader{
   620  					OrgID:     "abc",
   621  					SpaceID:   "def",
   622  					AccountID: "ghi",
   623  					Region:    "eu-de",
   624  				}
   625  				err := newAlbs(server.URL()).RemoveALBCertBySecretName("mycluster", "test", target)
   626  				Expect(err).To(HaveOccurred())
   627  			})
   628  		})
   629  	})
   630  	//RemoveALBCertByCertCRN
   631  	Describe("Delete", func() {
   632  		Context("When delete of alb cert is successful", func() {
   633  			BeforeEach(func() {
   634  				server = ghttp.NewServer()
   635  				server.AppendHandlers(
   636  					ghttp.CombineHandlers(
   637  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/clusters/mycluster/albsecrets"),
   638  						ghttp.RespondWith(http.StatusOK, `{							
   639  						}`),
   640  					),
   641  				)
   642  			})
   643  
   644  			It("should delete alb cert", func() {
   645  				target := ClusterTargetHeader{
   646  					OrgID:     "abc",
   647  					SpaceID:   "def",
   648  					AccountID: "ghi",
   649  					Region:    "eu-de",
   650  				}
   651  				err := newAlbs(server.URL()).RemoveALBCertByCertCRN("mycluster", "test", target)
   652  				Expect(err).NotTo(HaveOccurred())
   653  			})
   654  		})
   655  		Context("When alb cert delete is failed", func() {
   656  			BeforeEach(func() {
   657  				server = ghttp.NewServer()
   658  				server.SetAllowUnhandledRequests(true)
   659  				server.AppendHandlers(
   660  					ghttp.CombineHandlers(
   661  						ghttp.VerifyRequest(http.MethodDelete, "/v1/alb/clusters/mycluster/albsecrets"),
   662  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to delete alb`),
   663  					),
   664  				)
   665  			})
   666  
   667  			It("should return error alb cert delete", func() {
   668  				target := ClusterTargetHeader{
   669  					OrgID:     "abc",
   670  					SpaceID:   "def",
   671  					AccountID: "ghi",
   672  					Region:    "eu-de",
   673  				}
   674  				err := newAlbs(server.URL()).RemoveALBCertByCertCRN("mycluster", "test", target)
   675  				Expect(err).To(HaveOccurred())
   676  			})
   677  		})
   678  	})
   679  	//GetALBUpdatePolicy
   680  	Describe("Get alb update policy", func() {
   681  		Context("When read of alb update policy is successful", func() {
   682  			BeforeEach(func() {
   683  				server = ghttp.NewServer()
   684  				server.AppendHandlers(
   685  					ghttp.CombineHandlers(
   686  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/testCluster/updatepolicy"),
   687  						ghttp.RespondWith(http.StatusOK, `{"autoUpdate": true,"latestVersion": true}`),
   688  					),
   689  				)
   690  			})
   691  
   692  			It("should return enabled autoupdate", func() {
   693  				target := ClusterTargetHeader{
   694  					OrgID:     "abc",
   695  					SpaceID:   "def",
   696  					AccountID: "ghi",
   697  					Region:    "eu-de",
   698  				}
   699  				updatePolicyResp, err := newAlbs(server.URL()).GetALBUpdatePolicy("testCluster", target)
   700  				Expect(updatePolicyResp).ShouldNot(BeNil())
   701  				Expect(updatePolicyResp).Should(Equal(updatePolicy))
   702  				Expect(err).NotTo(HaveOccurred())
   703  			})
   704  		})
   705  		Context("When read of alb update policy is failed", func() {
   706  			BeforeEach(func() {
   707  				server = ghttp.NewServer()
   708  				server.SetAllowUnhandledRequests(true)
   709  				server.AppendHandlers(
   710  					ghttp.CombineHandlers(
   711  						ghttp.VerifyRequest(http.MethodGet, "/v1/alb/clusters/testCluster/updatepolicy"),
   712  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to get alb update policy`),
   713  					),
   714  				)
   715  			})
   716  
   717  			It("should return error when alb update policy get", func() {
   718  				target := ClusterTargetHeader{
   719  					OrgID:     "abc",
   720  					SpaceID:   "def",
   721  					AccountID: "ghi",
   722  					Region:    "eu-de",
   723  				}
   724  				_, err := newAlbs(server.URL()).GetALBUpdatePolicy("testCluster", target)
   725  				Expect(err).To(HaveOccurred())
   726  			})
   727  		})
   728  	})
   729  	//ChangeALBUpdatePolicy
   730  	Describe("Change alb update policy", func() {
   731  		Context("When change alb update policy is successful", func() {
   732  			BeforeEach(func() {
   733  				server = ghttp.NewServer()
   734  				server.AppendHandlers(
   735  					ghttp.CombineHandlers(
   736  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/clusters/testCluster/updatepolicy"),
   737  						ghttp.RespondWith(http.StatusOK, ``),
   738  					),
   739  				)
   740  			})
   741  
   742  			It("should enable autoupdate", func() {
   743  				target := ClusterTargetHeader{
   744  					OrgID:     "abc",
   745  					SpaceID:   "def",
   746  					AccountID: "ghi",
   747  					Region:    "eu-de",
   748  				}
   749  				err := newAlbs(server.URL()).ChangeALBUpdatePolicy("testCluster", updatePolicy, target)
   750  				Expect(err).NotTo(HaveOccurred())
   751  			})
   752  		})
   753  		Context("When change of alb update policy is failed", func() {
   754  			BeforeEach(func() {
   755  				server = ghttp.NewServer()
   756  				server.SetAllowUnhandledRequests(true)
   757  				server.AppendHandlers(
   758  					ghttp.CombineHandlers(
   759  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/clusters/testCluster/updatepolicy"),
   760  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to set alb update policy`),
   761  					),
   762  				)
   763  			})
   764  
   765  			It("should return error when alb update policy set", func() {
   766  				target := ClusterTargetHeader{
   767  					OrgID:     "abc",
   768  					SpaceID:   "def",
   769  					AccountID: "ghi",
   770  					Region:    "eu-de",
   771  				}
   772  				err := newAlbs(server.URL()).ChangeALBUpdatePolicy("testCluster", updatePolicy, target)
   773  				Expect(err).To(HaveOccurred())
   774  			})
   775  		})
   776  	})
   777  	//UpdateALBs
   778  	Describe("Update ALBs", func() {
   779  		Context("When change force ALB update", func() {
   780  			BeforeEach(func() {
   781  				server = ghttp.NewServer()
   782  				server.AppendHandlers(
   783  					ghttp.CombineHandlers(
   784  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/clusters/testCluster/update"),
   785  						ghttp.RespondWith(http.StatusOK, ``),
   786  					),
   787  				)
   788  			})
   789  
   790  			It("should update ALBs", func() {
   791  				target := ClusterTargetHeader{
   792  					OrgID:     "abc",
   793  					SpaceID:   "def",
   794  					AccountID: "ghi",
   795  					Region:    "eu-de",
   796  				}
   797  				err := newAlbs(server.URL()).UpdateALBs("testCluster", target)
   798  				Expect(err).NotTo(HaveOccurred())
   799  			})
   800  		})
   801  		Context("When update ALBs is failed", func() {
   802  			BeforeEach(func() {
   803  				server = ghttp.NewServer()
   804  				server.SetAllowUnhandledRequests(true)
   805  				server.AppendHandlers(
   806  					ghttp.CombineHandlers(
   807  						ghttp.VerifyRequest(http.MethodPut, "/v1/alb/clusters/testCluster/update"),
   808  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to update ALBs`),
   809  					),
   810  				)
   811  			})
   812  
   813  			It("should return error when update ALBs", func() {
   814  				target := ClusterTargetHeader{
   815  					OrgID:     "abc",
   816  					SpaceID:   "def",
   817  					AccountID: "ghi",
   818  					Region:    "eu-de",
   819  				}
   820  				err := newAlbs(server.URL()).UpdateALBs("testCluster", target)
   821  				Expect(err).To(HaveOccurred())
   822  			})
   823  		})
   824  	})
   825  
   826  })
   827  
   828  func newAlbs(url string) Albs {
   829  
   830  	sess, err := session.New()
   831  	if err != nil {
   832  		log.Fatal(err)
   833  	}
   834  	conf := sess.Config.Copy()
   835  	conf.HTTPClient = bluemixHttp.NewHTTPClient(conf)
   836  	conf.Endpoint = &url
   837  
   838  	client := client.Client{
   839  		Config:      conf,
   840  		ServiceName: bluemix.MccpService,
   841  	}
   842  	return newAlbAPI(&client)
   843  }