github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/container/containerv1/subnets_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/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  	"github.com/onsi/gomega/ghttp"
    15  )
    16  
    17  var _ = Describe("Subnets", func() {
    18  	var server *ghttp.Server
    19  	Describe("Add", func() {
    20  		Context("When adding a subnet is successful", func() {
    21  			BeforeEach(func() {
    22  				server = ghttp.NewServer()
    23  				server.AppendHandlers(
    24  					ghttp.CombineHandlers(
    25  						ghttp.VerifyRequest(http.MethodPut, "/v1/clusters/test/subnets/1109876"),
    26  						ghttp.RespondWith(http.StatusCreated, `{}`),
    27  					),
    28  				)
    29  			})
    30  
    31  			It("should return subnet added to cluster", func() {
    32  				target := ClusterTargetHeader{
    33  					OrgID:     "abc",
    34  					SpaceID:   "def",
    35  					AccountID: "ghi",
    36  				}
    37  				err := newSubnet(server.URL()).AddSubnet("test", "1109876", target)
    38  				Expect(err).NotTo(HaveOccurred())
    39  			})
    40  		})
    41  		Context("When adding subnet is unsuccessful", func() {
    42  			BeforeEach(func() {
    43  				server = ghttp.NewServer()
    44  				server.SetAllowUnhandledRequests(true)
    45  				server.AppendHandlers(
    46  					ghttp.CombineHandlers(
    47  						ghttp.VerifyRequest(http.MethodPut, "/v1/clusters/test/subnets/1109876"),
    48  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to add subnet to cluster`),
    49  					),
    50  				)
    51  			})
    52  
    53  			It("should return error during add subnet to cluster", func() {
    54  				target := ClusterTargetHeader{
    55  					OrgID:     "abc",
    56  					SpaceID:   "def",
    57  					AccountID: "ghi",
    58  				}
    59  				err := newSubnet(server.URL()).AddSubnet("test", "1109876", target)
    60  				Expect(err).To(HaveOccurred())
    61  			})
    62  		})
    63  	})
    64  	//List
    65  	Describe("List", func() {
    66  		Context("When retrieving available subnets is successful", func() {
    67  			BeforeEach(func() {
    68  				server = ghttp.NewServer()
    69  				server.AppendHandlers(
    70  					ghttp.CombineHandlers(
    71  						ghttp.VerifyRequest(http.MethodGet, "/v1/subnets"),
    72  						ghttp.RespondWith(http.StatusOK, `[{
    73  						"ID": "535642",
    74  						"Type": "private",     
    75  						"VlanID": "1565297",
    76  						"IPAddresses": ["10.98.25.2","10.98.25.3","10.98.25.4"],
    77  						"Properties": {
    78  						"CIDR": "26 ",
    79  						"NetworkIdentifier":"10.130.229.64",
    80  						"Note": "",
    81  						"SubnetType":"additional_primary",
    82  						"DisplayLabel":"",
    83  						"Gateway":""
    84  						}
    85  						}]`),
    86  					),
    87  				)
    88  			})
    89  
    90  			It("should return available subnets ", func() {
    91  				target := ClusterTargetHeader{
    92  					OrgID:     "abc",
    93  					SpaceID:   "def",
    94  					AccountID: "ghi",
    95  				}
    96  				subnets, err := newSubnet(server.URL()).List(target)
    97  				Expect(err).NotTo(HaveOccurred())
    98  				Expect(subnets).ShouldNot(BeNil())
    99  				for _, sObj := range subnets {
   100  					Expect(sObj).ShouldNot(BeNil())
   101  					Expect(sObj.ID).Should(Equal("535642"))
   102  					Expect(sObj.Type).Should(Equal("private"))
   103  				}
   104  			})
   105  		})
   106  		Context("When retrieving available subnets is unsuccessful", func() {
   107  			BeforeEach(func() {
   108  				server = ghttp.NewServer()
   109  				server.SetAllowUnhandledRequests(true)
   110  				server.AppendHandlers(
   111  					ghttp.CombineHandlers(
   112  						ghttp.VerifyRequest(http.MethodGet, "/v1/subnets"),
   113  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve subnets`),
   114  					),
   115  				)
   116  			})
   117  
   118  			It("should return error during retrieveing subnets", func() {
   119  				target := ClusterTargetHeader{
   120  					OrgID:     "abc",
   121  					SpaceID:   "def",
   122  					AccountID: "ghi",
   123  				}
   124  				subnets, err := newSubnet(server.URL()).List(target)
   125  				Expect(err).To(HaveOccurred())
   126  				Expect(subnets).Should(BeNil())
   127  			})
   128  		})
   129  	})
   130  
   131  	//AddClusterUserSubnet
   132  	Describe("AddClusterUserSubnet", func() {
   133  		Context("When adding a user subnet is successful", func() {
   134  			BeforeEach(func() {
   135  				server = ghttp.NewServer()
   136  				server.AppendHandlers(
   137  					ghttp.CombineHandlers(
   138  						ghttp.VerifyRequest(http.MethodPost, "/v1/clusters/test/usersubnets"),
   139  						ghttp.RespondWith(http.StatusCreated, `{}`),
   140  					),
   141  				)
   142  			})
   143  
   144  			It("should return user subnet added to cluster", func() {
   145  				target := ClusterTargetHeader{
   146  					OrgID:     "abc",
   147  					SpaceID:   "def",
   148  					AccountID: "ghi",
   149  				}
   150  				userSubnet := UserSubnet{
   151  					CIDR:   "9.0.0.1",
   152  					VLANID: "1156748",
   153  				}
   154  				err := newSubnet(server.URL()).AddClusterUserSubnet("test", userSubnet, target)
   155  				Expect(err).NotTo(HaveOccurred())
   156  			})
   157  		})
   158  		Context("When adding user subnet is unsuccessful", func() {
   159  			BeforeEach(func() {
   160  				server = ghttp.NewServer()
   161  				server.SetAllowUnhandledRequests(true)
   162  				server.AppendHandlers(
   163  					ghttp.CombineHandlers(
   164  						ghttp.VerifyRequest(http.MethodPost, "/v1/clusters/test/usersubnets"),
   165  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to add user subnet to cluster`),
   166  					),
   167  				)
   168  			})
   169  
   170  			It("should return error during adding user subnet to cluster", func() {
   171  				target := ClusterTargetHeader{
   172  					OrgID:     "abc",
   173  					SpaceID:   "def",
   174  					AccountID: "ghi",
   175  				}
   176  				userSubnet := UserSubnet{
   177  					CIDR:   "9.0.0.1",
   178  					VLANID: "1156748",
   179  				}
   180  				err := newSubnet(server.URL()).AddClusterUserSubnet("test", userSubnet, target)
   181  				Expect(err).To(HaveOccurred())
   182  			})
   183  		})
   184  	})
   185  
   186  	//ListClusterUserSubnets
   187  	Describe("ListClusterUserSubnets", func() {
   188  		Context("When retrieving available user subnets is successful", func() {
   189  			BeforeEach(func() {
   190  				server = ghttp.NewServer()
   191  				server.AppendHandlers(
   192  					ghttp.CombineHandlers(
   193  						ghttp.VerifyRequest(http.MethodGet, "/v1/clusters/test/usersubnets"),
   194  						ghttp.RespondWith(http.StatusOK, `[{
   195  						  "ID": "177453",
   196  							"Subnets": [
   197  							{
   198  							"Cidr": "159.8.226.208/29",
   199  							"ID": "1541737",
   200  							"Ips": ["159.8.226.210"],
   201  							"Is_ByOIP": false,
   202  							"Is_Public": true
   203  							}]
   204  							}]`),
   205  					),
   206  				)
   207  			})
   208  
   209  			It("should return available subnets ", func() {
   210  				target := ClusterTargetHeader{
   211  					OrgID:     "abc",
   212  					SpaceID:   "def",
   213  					AccountID: "ghi",
   214  				}
   215  				subnets, err := newSubnet(server.URL()).ListClusterUserSubnets("test", target)
   216  				Expect(err).NotTo(HaveOccurred())
   217  				Expect(subnets).ShouldNot(BeNil())
   218  				for _, sObj := range subnets {
   219  					Expect(sObj).ShouldNot(BeNil())
   220  				}
   221  			})
   222  		})
   223  		Context("When retrieving available user subnets is unsuccessful", func() {
   224  			BeforeEach(func() {
   225  				server = ghttp.NewServer()
   226  				server.SetAllowUnhandledRequests(true)
   227  				server.AppendHandlers(
   228  					ghttp.CombineHandlers(
   229  						ghttp.VerifyRequest(http.MethodGet, "/v1/clusters/test/usersubnets"),
   230  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to retrieve user subnets`),
   231  					),
   232  				)
   233  			})
   234  
   235  			It("should return error during retrieveing user subnets", func() {
   236  				target := ClusterTargetHeader{
   237  					OrgID:     "abc",
   238  					SpaceID:   "def",
   239  					AccountID: "ghi",
   240  				}
   241  				subnets, err := newSubnet(server.URL()).ListClusterUserSubnets("test", target)
   242  				Expect(err).To(HaveOccurred())
   243  				Expect(subnets).Should(BeNil())
   244  			})
   245  		})
   246  	})
   247  
   248  	//DeleteClusterUserSubnet
   249  	Describe("DeleteClusterUserSubnet", func() {
   250  		Context("When delete of cluster user subnet is successful", func() {
   251  			BeforeEach(func() {
   252  				server = ghttp.NewServer()
   253  				server.AppendHandlers(
   254  					ghttp.CombineHandlers(
   255  						ghttp.VerifyRequest(http.MethodDelete, "/v1/clusters/test/usersubnets/110976/vlans/174991"),
   256  						ghttp.RespondWith(http.StatusOK, `{							
   257  						}`),
   258  					),
   259  				)
   260  			})
   261  
   262  			It("should delete cluster", func() {
   263  				target := ClusterTargetHeader{
   264  					OrgID:     "abc",
   265  					SpaceID:   "def",
   266  					AccountID: "ghi",
   267  				}
   268  				err := newSubnet(server.URL()).DeleteClusterUserSubnet("test", "110976", "174991", target)
   269  				Expect(err).NotTo(HaveOccurred())
   270  			})
   271  		})
   272  		Context("When cluster user subnet delete is failed", func() {
   273  			BeforeEach(func() {
   274  				server = ghttp.NewServer()
   275  				server.SetAllowUnhandledRequests(true)
   276  				server.AppendHandlers(
   277  					ghttp.CombineHandlers(
   278  						ghttp.VerifyRequest(http.MethodDelete, "/v1/clusters/test/usersubnets/110976/vlans/174991"),
   279  						ghttp.RespondWith(http.StatusInternalServerError, `Failed to delete cluster user subnet`),
   280  					),
   281  				)
   282  			})
   283  
   284  			It("should return error deleting user subnet", func() {
   285  				target := ClusterTargetHeader{
   286  					OrgID:     "abc",
   287  					SpaceID:   "def",
   288  					AccountID: "ghi",
   289  				}
   290  				err := newSubnet(server.URL()).DeleteClusterUserSubnet("test", "110976", "174991", target)
   291  				Expect(err).To(HaveOccurred())
   292  			})
   293  		})
   294  	})
   295  })
   296  
   297  func newSubnet(url string) Subnets {
   298  
   299  	sess, err := session.New()
   300  	if err != nil {
   301  		log.Fatal(err)
   302  	}
   303  	conf := sess.Config.Copy()
   304  	conf.HTTPClient = bluemixHttp.NewHTTPClient(conf)
   305  	conf.Endpoint = &url
   306  
   307  	client := client.Client{
   308  		Config:      conf,
   309  		ServiceName: bluemix.MccpService,
   310  	}
   311  	return newSubnetAPI(&client)
   312  }