github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev1/catalog/resource_catalog_test.go (about)

     1  package catalog
     2  
     3  import (
     4  	"log"
     5  	"net/http"
     6  
     7  	"github.com/IBM-Cloud/bluemix-go"
     8  
     9  	"github.com/IBM-Cloud/bluemix-go/client"
    10  	"github.com/IBM-Cloud/bluemix-go/models"
    11  	"github.com/IBM-Cloud/bluemix-go/session"
    12  	"github.com/onsi/gomega/ghttp"
    13  
    14  	. "github.com/onsi/ginkgo"
    15  	. "github.com/onsi/gomega"
    16  )
    17  
    18  var _ = Describe("ResourceCatalogRepository", func() {
    19  	var server *ghttp.Server
    20  	AfterEach(func() {
    21  		server.Close()
    22  	})
    23  
    24  	Describe("FindByName", func() {
    25  		Context("When there is no resource", func() {
    26  			BeforeEach(func() {
    27  				server = ghttp.NewServer()
    28  				server.AppendHandlers(
    29  					ghttp.CombineHandlers(
    30  						ghttp.VerifyRequest(http.MethodGet, "/api/v1/", "q=test"),
    31  						ghttp.RespondWith(http.StatusOK, `{"resources":[]}`),
    32  					),
    33  				)
    34  			})
    35  			It("should return not found error", func() {
    36  				repo := newTestResourceCatalogRepo(server.URL())
    37  				resources, err := repo.FindByName("test", false)
    38  
    39  				Expect(err).Should(HaveOccurred())
    40  				Expect(resources).Should(BeEmpty())
    41  			})
    42  		})
    43  
    44  		Context("When there is one resource", func() {
    45  			BeforeEach(func() {
    46  				server = ghttp.NewServer()
    47  				server.AppendHandlers(
    48  					ghttp.CombineHandlers(
    49  						ghttp.VerifyRequest(http.MethodGet, "/api/v1/", "q=global-geo-test-service&include=*"),
    50  						ghttp.RespondWith(http.StatusOK, `
    51  							{"offset":0,"limit":50,"count":1,"resource_count":1,"first":"https://resource-catalog.stage1.ng.bluemix.net/api/v1?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4&q=global-geo-test-service","resources":[{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/b275d042-8376-11e7-bb31-be2e44b06b34/%2A","created":"2017-08-17T20:16:54.137Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:b275d042-8376-11e7-bb31-be2e44b06b34","geo_tags":["eu-gb","us-south"],"id":"b275d042-8376-11e7-bb31-be2e44b06b34","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/b275d042-8376-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":true,"bindable":true,"cf_plan_guid":{"stage1.ng.bluemix.net":"1bcf9cc3-3d26-481f-a72c-f9ad40495b31"},"iam_compatible":true,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":true,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"global-geo-test-service","overview_ui":{"en":{"description":"global-geo-test-service.","display_name":"global-geo-test-service","long_description":"global-geo-test-service"}},"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-09-08T23:26:28.981Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/b275d042-8376-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"79801189f2ab72d269b633cdea173b20":"global","ac5bc3a3a4f1dd065f5c92b444be3d01":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/ac5bc3a3a4f1dd065f5c92b444be3d01","restrict":false}}]}`),
    52  					),
    53  				)
    54  			})
    55  			It("should return one resource", func() {
    56  				repo := newTestResourceCatalogRepo(server.URL())
    57  				resources, err := repo.FindByName("global-geo-test-service", true)
    58  
    59  				Expect(err).ShouldNot(HaveOccurred())
    60  				Expect(resources).Should(Equal([]models.Service{{
    61  					ID:         "b275d042-8376-11e7-bb31-be2e44b06b34",
    62  					CatalogCRN: "crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:b275d042-8376-11e7-bb31-be2e44b06b34",
    63  					Name:       "global-geo-test-service",
    64  					Kind:       "service",
    65  					URL:        "https://resource-catalog.stage1.ng.bluemix.net/api/v1/b275d042-8376-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4",
    66  					Metadata:   []byte(`{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/b275d042-8376-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":true,"bindable":true,"cf_plan_guid":{"stage1.ng.bluemix.net":"1bcf9cc3-3d26-481f-a72c-f9ad40495b31"},"iam_compatible":true,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":true,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}}`),
    67  				}}))
    68  			})
    69  		})
    70  
    71  		Context("When there is multiple resources", func() {
    72  			BeforeEach(func() {
    73  				server = ghttp.NewServer()
    74  				server.AppendHandlers(
    75  					ghttp.CombineHandlers(
    76  						ghttp.VerifyRequest(http.MethodGet, "/api/v1/", "q=Automation%20test&include=*"),
    77  						ghttp.RespondWith(http.StatusOK, `
    78  							{"offset":0,"limit":50,"count":5,"resource_count":5,"first":"https://resource-catalog.stage1.ng.bluemix.net/api/v1?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4&q=Automation+test","resources":[{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/edca1a82-7326-11e7-8cf7-a6006ad3dba0/%2A","created":"2017-08-08T21:24:31.731Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:edca1a82-7326-11e7-8cf7-a6006ad3dba0","geo_tags":["eu-gb","us-south"],"id":"edca1a82-7326-11e7-8cf7-a6006ad3dba0","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/edca1a82-7326-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"cf_plan_guid":{"stage1.eu-gb.bluemix.net":"9bf099a2-7b22-4b32-a165-42e99d0286e8","stage1.ng.bluemix.net":"b1a78e15-b43f-40c5-821a-787dc9523409"},"iam_compatible":true,"plan_updateable":false,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"Async CF Automation Test","overview_ui":{"en":{"description":"Async CF  broker.","display_name":"Async CF  broker","long_description":"Async CF  broker"}},"pricing_tags":["free","paygo"],"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-08-09T19:22:11.866Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/edca1a82-7326-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"79801189f2ab72d269b633cdea173b20":"global","ac5bc3a3a4f1dd065f5c92b444be3d01":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/ac5bc3a3a4f1dd065f5c92b444be3d01","restrict":false}},{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/297ffc2e-732a-11e7-8cf7-a6006ad3dba0/%2A","created":"2017-08-08T20:45:02.148Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/3d0b3905d569f2c9c231b2a700c22ef4::service:297ffc2e-732a-11e7-8cf7-a6006ad3dba0","geo_tags":["eu-gb","us-south"],"id":"297ffc2e-732a-11e7-8cf7-a6006ad3dba0","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/297ffc2e-732a-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"cf_plan_guid":{"stage1.eu-gb.bluemix.net":"9bf099a2-7b22-4b32-a165-42e99d0286e8","stage1.ng.bluemix.net":"b1a78e15-b43f-40c5-821a-787dc9523409"},"iam_compatible":true,"plan_updateable":false,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"Async Rc Automation test","overview_ui":{"en":{"description":"Async RC  broker.","display_name":"Async RC  broker","long_description":"Async RC  broker"}},"pricing_tags":["free","paygo"],"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-09-05T01:02:35.715Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/297ffc2e-732a-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"3d0b3905d569f2c9c231b2a700c22ef4":"global","79801189f2ab72d269b633cdea173b20":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/3d0b3905d569f2c9c231b2a700c22ef4","restrict":false}},{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/a802af12-7094-11e7-8cf7-a6006ad3dba0/%2A","created":"2017-08-08T20:03:51.77Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:a802af12-7094-11e7-8cf7-a6006ad3dba0","geo_tags":["eu-gb","us-south"],"id":"a802af12-7094-11e7-8cf7-a6006ad3dba0","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/a802af12-7094-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"cf_plan_guid":{"stage1.eu-gb.bluemix.net":"9bf099a2-7b22-4b32-a165-42e99d0286e8","stage1.ng.bluemix.net":"b1a78e15-b43f-40c5-821a-787dc9523409"},"iam_compatible":true,"plan_updateable":false,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"Automation test","overview_ui":{"en":{"description":"rc compatible broker.","display_name":"rc compatible broker","long_description":"rc compatible broker"}},"pricing_tags":["free","paygo"],"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-09-13T00:54:15.522Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/a802af12-7094-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"79801189f2ab72d269b633cdea173b20":"global","ac5bc3a3a4f1dd065f5c92b444be3d01":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/ac5bc3a3a4f1dd065f5c92b444be3d01","restrict":false}},{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/bc4b35b4-70cd-11e7-8cf7-a6006ad3dba0/%2A","created":"2017-08-08T19:51:22.336Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:bc4b35b4-70cd-11e7-8cf7-a6006ad3dba0","geo_tags":["eu-gb","us-south"],"id":"bc4b35b4-70cd-11e7-8cf7-a6006ad3dba0","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/bc4b35b4-70cd-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"cf_plan_guid":{"stage1.eu-gb.bluemix.net":"9bf099a2-7b22-4b32-a165-42e99d0286e8","stage1.ng.bluemix.net":"b1a78e15-b43f-40c5-821a-787dc9523409"},"iam_compatible":false,"plan_updateable":false,"rc_compatible":false,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"CF Automation Test","overview_ui":{"en":{"description":"cf compatible broker.","display_name":"cf compatible broker","long_description":"cf compatible broker"}},"pricing_tags":["free","paygo"],"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-08-09T19:07:27.852Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/bc4b35b4-70cd-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"79801189f2ab72d269b633cdea173b20":"global","ac5bc3a3a4f1dd065f5c92b444be3d01":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/ac5bc3a3a4f1dd065f5c92b444be3d01","restrict":false}},{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/d2619a98-86c9-11e7-bb31-be2e44b06b34/%2A","created":"2017-09-08T22:01:03.548Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:d2619a98-86c9-11e7-bb31-be2e44b06b34","geo_tags":["eu-gb","us-south"],"id":"d2619a98-86c9-11e7-bb31-be2e44b06b34","images":{"feature_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant64.png","image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant50.png","medium_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant32.png","small_image":"https://cloudantbroker.stage1.ng.bluemix.net/cloudant24.png"},"kind":"service","metadata":{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/d2619a98-86c9-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"iam_compatible":true,"plan_updateable":false,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}},"name":"RcAutomation-Test-Validation","overview_ui":{"en":{"description":"rc compatible broker.","display_name":"rc compatible broker","long_description":"rc compatible broker"}},"pricing_tags":["free"],"provider":{"email":"sales@cloudant.com","name":"IBM"},"tags":["ibm_created"],"updated":"2017-09-08T22:02:55.265Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/d2619a98-86c9-11e7-bb31-be2e44b06b34?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4","visibility":{"exclude":{},"include":{"accounts":{"79801189f2ab72d269b633cdea173b20":"global","ac5bc3a3a4f1dd065f5c92b444be3d01":"global","bd087e8d604cef993f957c859e37f283":"global"}},"owner":"a/ac5bc3a3a4f1dd065f5c92b444be3d01","restrict":false}}]}
    79  							`),
    80  					),
    81  				)
    82  			})
    83  			It("should return not found error", func() {
    84  				repo := newTestResourceCatalogRepo(server.URL())
    85  				resources, err := repo.FindByName("Automation test", true)
    86  
    87  				Expect(err).ShouldNot(HaveOccurred())
    88  				Expect(resources).Should(Equal([]models.Service{{
    89  					ID:         "a802af12-7094-11e7-8cf7-a6006ad3dba0",
    90  					CatalogCRN: "crn:v1:staging:public:resource-catalog::a/ac5bc3a3a4f1dd065f5c92b444be3d01::service:a802af12-7094-11e7-8cf7-a6006ad3dba0",
    91  					Name:       "Automation test",
    92  					Kind:       "service",
    93  					URL:        "https://resource-catalog.stage1.ng.bluemix.net/api/v1/a802af12-7094-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8%2Czh-CN%3Bq%3D0.6%2Czh%3Bq%3D0.4",
    94  					Metadata:   []byte(`{"callbacks":{"broker_url":"https://dev-resource-catalog.stage1.ng.bluemix.net/api/v1/a802af12-7094-11e7-8cf7-a6006ad3dba0?include=%2A&languages=en-US%2Cen%3Bq%3D0.8"},"service":{"active":false,"bindable":false,"cf_plan_guid":{"stage1.eu-gb.bluemix.net":"9bf099a2-7b22-4b32-a165-42e99d0286e8","stage1.ng.bluemix.net":"b1a78e15-b43f-40c5-821a-787dc9523409"},"iam_compatible":true,"plan_updateable":false,"rc_compatible":true,"rc_provisionable":true,"service_check_enabled":false,"state":"","test_check_interval":0,"unique_api_key":false},"ui":{"allow_internal_users":false,"urls":{}}}`),
    95  				}}))
    96  			})
    97  		})
    98  
    99  		Context("When there is error", func() {
   100  			BeforeEach(func() {
   101  				server = ghttp.NewServer()
   102  				server.AppendHandlers(
   103  					ghttp.CombineHandlers(
   104  						ghttp.VerifyRequest(http.MethodGet, "/api/v1/", "q=test"),
   105  						ghttp.RespondWith(http.StatusUnauthorized, `Token expired`),
   106  					),
   107  				)
   108  			})
   109  			It("should return not found error", func() {
   110  				repo := newTestResourceCatalogRepo(server.URL())
   111  				resources, err := repo.FindByName("test", false)
   112  
   113  				Expect(err).Should(HaveOccurred())
   114  				Expect(resources).Should(BeEmpty())
   115  			})
   116  		})
   117  
   118  		Context("When there are two resources with same name", func() {
   119  			BeforeEach(func() {
   120  				server = ghttp.NewServer()
   121  				server.AppendHandlers(
   122  					ghttp.CombineHandlers(
   123  						ghttp.VerifyRequest(http.MethodGet, "/api/v1/", "q=cloud-object-storage&include=*"),
   124  						ghttp.RespondWith(http.StatusOK, `
   125  							{"offset":0,"limit":50,"count":1,"resource_count":1,"first":"https://resource-catalog.stage1.ng.bluemix.net/api/v1?include=%2A&languages=en_US%2Cen&q=cloud-object-storage","resources":[{"children":[{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c/%2A","created":"2017-09-21T18:25:05.176Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/9e16d1fed8aa7e1bd73e7a9d23434a5a::iaas:dff97f5c-bc5e-4455-b470-411c3edbe49c","geo_tags":["us-south-aus01","us-south-dal10","us-south-dal12","us-south-dal13"],"id":"dff97f5c-bc5e-4455-b470-411c3edbe49c","images":{"image":"https://sl-catalogapi-opsconsoledev.stage1.ng.bluemix.net/cache/99d-1554309718/assets/icons/object-storage.png"},"kind":"iaas","metadata":{"callbacks":{"broker_proxy_url":"https://console.ng.bluemix.net","broker_url":"https://console.ng.bluemix.net"},"other":{"dashboard":{"serviceCustomNavigationItems":[{"i18n":{"en":{"label":"Buckets and objects"}},"id":"manage","subItems":[{"i18n":{"en":{"label":"Bucket overview"}},"id":"bucket_overview","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Bucket permissions"}},"id":"bucket_permissions","url":"http://console.stage1.bluemix.net/objectstorage/"}],"url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Endpoint"}},"id":"endpoint","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Usage details"}},"id":"usage","url":"http://console.stage1.bluemix.net/objectstorage/"}],"serviceNavigationOrder":["gettingStarted","manage","endpoint","credentials","connectedObjects","usage","plan"]}},"pricing":{"costs":[{"currencies":[{"amount":{"USD":"0.00"},"country":"USA"}],"part_number":"","tier_model":"","tier_quantity":"1.000","unit":"HOURS_PER_MONTH","unit_id":"HOURS_PER_MONTH","unit_quantity":""}],"ibm_pricing":false},"service":{"active":false,"async_provisioning_supported":false,"async_unprovisioning_supported":false,"bindable":false,"cf_service_name":"cos-temp-name","custom_create_page_hybrid_enabled":false,"extension":null,"iam_compatible":true,"parameters":null,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":false,"service_check_enabled":false,"service_key_supported":true,"state":"","test_check_interval":0,"type":"","unique_api_key":false,"user_defined_service":null},"sla":{"dr":{"dr":false},"tenancy":"single_tenant","terms":"http://term.condition.url"},"ui":{"side_by_side_index":1,"strings":{"en":{"bullets":[{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/api.svg","title":"S3 API (limited tooling)"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/regions.svg","title":"Regional and Cross Regional Resiliency"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/plans.svg","title":"Lite & Premium Plans"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/data.svg","title":"Flexible data classes cost optimized for your workload needs"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/security.svg","title":"Built in Security for data at rest and in transit"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/binding.svg","title":"Bluemix Application Binding"}]}},"urls":{"create_url":"https://console.stage1.bluemix.net/catalog/infrastructure/cloud-object-storage","doc_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","instructions_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","terms_url":"https://www.ibm.com/software/sla/sladb.nsf/sla/bm-7230-01"}}},"name":"cloud-object-storage","overview_ui":{"en":{"description":"Our most recommended service constantly adding robust features","display_name":"Cloud Object Storage","long_description":"Access your unstructured data from anywhere in the world with industry standard RESTful APIs, or via a self-service web-based portal. Enterprise availability and security lets your applications scale with confidence. You can deploy stand-alone services, or seamlessly integrate with other IBM Cloud and Bluemix services, including analytics, computing, and cognitive applications."}},"parent_id":"object-storage-group","parent_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group","pricing_tags":["paid_only","paygo"],"provider":{"name":"IBM"},"tags":["g2","ibm_created","lux","storage"],"updated":"2017-09-25T22:47:37.079Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c?include=%2A&languages=en_US%2Cen","visibility":{"exclude":{},"include":{"accounts":{"11bf145efcc3081d1706ffa5734f0672":"global","249d926cb9bb46119e3bda8ed7f7f618":"global","265d9d22597d4ee589138929093f1246":"global","2a024d99093d4c3fc409e25d553ecb21":"global","2fdf0c082d324f4684b532e0c92fffd8":"global","3d9e32cc8e2c8c33026a8717256616e6":"global","49abfb9d0abddaa5f15d6e1f37e1ac58":"global","50860b903d7d78346258b14aa2667a23":"global","999c0f832ad0cd5b7aad7a26fcb92680":"global","9e16d1fed8aa7e1bd73e7a9d23434a5a":"global","a00c731cff012576d0612c0c811772e4":"global","a252ff3406dd29d7f77d5cf5807990d7":"global","a6032862a2dd327dedae0a2159f818cd":"global","b09edf5642ebfad587c594f4d4a354b0":"global","c32adbc8c683c3f39b3e643ae19993f5":"global","ccc74502c2d2c438763eef92e0291d24":"global","d4a70ce3b153a2e5a0e1bbf5569867ba":"global","d7026b374f39f570d20984c19c6ecf63":"global","d939d87aaebc9ee4339e36e4ccc67a0a":"global","df395fb648a606d256db06262000901c":"global","f3d1407c99e9fd93246225c90067903f":"global","fab6b5b09c41c4076a01d016f0e85b47":"global"}},"owner":"a/9e16d1fed8aa7e1bd73e7a9d23434a5a","restrict":false}}],"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group/%2A","created":"2017-09-21T18:21:33.96Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/2a024d99093d4c3fc409e25d553ecb21::iaas:object-storage-group","geo_tags":["us-south-aus01","us-south-dal10","us-south-dal12","us-south-dal13"],"group":true,"id":"object-storage-group","images":{"image":"https://sl-catalogapi-opsconsoledev.stage1.ng.bluemix.net/cache/99d-1554309718/assets/icons/object-storage.png"},"kind":"iaas","metadata":{"pricing":{"costs":[{"currencies":null,"part_number":"","tier_model":"","tier_quantity":"","unit":"","unit_id":"","unit_quantity":""}],"ibm_pricing":false},"ui":{"urls":{"create_url":"https://tbd.sidebyside.comparision"}}},"name":"object-storage-group","overview_ui":{"en":{"description":"Provides flexible, cost-effective, and scalable cloud storage for unstructured data.","display_name":"Cloud Object Storage","long_description":"Access your unstructured data from anywhere in the world with industry standard RESTful APIs, or via a self-service web-based portal. Enterprise availability and security lets your applications scale with confidence. You can deploy stand-alone services, or seamlessly integrate with other IBM Cloud and Bluemix services, including analytics, computing and cognitive applications."}},"pricing_tags":["paygo"],"provider":{"name":"IBM"},"tags":["group","ibm_created","storage"],"updated":"2017-09-21T18:23:31.427Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group?include=%2A&languages=en_US%2Cen","visibility":{"exclude":{},"include":{"accounts":{"2a024d99093d4c3fc409e25d553ecb21":"global","a00c731cff012576d0612c0c811772e4":"global","d939d87aaebc9ee4339e36e4ccc67a0a":"global"}},"owner":"a/2a024d99093d4c3fc409e25d553ecb21","restrict":false}},{"children":[{"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c/%2A","created":"2017-09-21T18:25:05.176Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/9e16d1fed8aa7e1bd73e7a9d23434a5a::iaas:dff97f5c-bc5e-4455-b470-411c3edbe49c","geo_tags":["us-south-aus01","us-south-dal10","us-south-dal12","us-south-dal13"],"id":"dff97f5c-bc5e-4455-b470-411c3edbe49d","images":{"image":"https://sl-catalogapi-opsconsoledev.stage1.ng.bluemix.net/cache/99d-1554309718/assets/icons/object-storage.png"},"kind":"iaas","metadata":{"callbacks":{"broker_proxy_url":"https://console.ng.bluemix.net","broker_url":"https://console.ng.bluemix.net"},"other":{"dashboard":{"serviceCustomNavigationItems":[{"i18n":{"en":{"label":"Buckets and objects"}},"id":"manage","subItems":[{"i18n":{"en":{"label":"Bucket overview"}},"id":"bucket_overview","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Bucket permissions"}},"id":"bucket_permissions","url":"http://console.stage1.bluemix.net/objectstorage/"}],"url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Endpoint"}},"id":"endpoint","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Usage details"}},"id":"usage","url":"http://console.stage1.bluemix.net/objectstorage/"}],"serviceNavigationOrder":["gettingStarted","manage","endpoint","credentials","connectedObjects","usage","plan"]}},"pricing":{"costs":[{"currencies":[{"amount":{"USD":"0.00"},"country":"USA"}],"part_number":"","tier_model":"","tier_quantity":"1.000","unit":"HOURS_PER_MONTH","unit_id":"HOURS_PER_MONTH","unit_quantity":""}],"ibm_pricing":false},"service":{"active":false,"async_provisioning_supported":false,"async_unprovisioning_supported":false,"bindable":false,"cf_service_name":"cos-temp-name","custom_create_page_hybrid_enabled":false,"extension":null,"iam_compatible":true,"parameters":null,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":false,"service_check_enabled":false,"service_key_supported":true,"state":"","test_check_interval":0,"type":"","unique_api_key":false,"user_defined_service":null},"sla":{"dr":{"dr":false},"tenancy":"single_tenant","terms":"http://term.condition.url"},"ui":{"side_by_side_index":1,"strings":{"en":{"bullets":[{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/api.svg","title":"S3 API (limited tooling)"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/regions.svg","title":"Regional and Cross Regional Resiliency"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/plans.svg","title":"Lite & Premium Plans"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/data.svg","title":"Flexible data classes cost optimized for your workload needs"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/security.svg","title":"Built in Security for data at rest and in transit"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/binding.svg","title":"Bluemix Application Binding"}]}},"urls":{"create_url":"https://console.stage1.bluemix.net/catalog/infrastructure/cloud-object-storage","doc_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","instructions_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","terms_url":"https://www.ibm.com/software/sla/sladb.nsf/sla/bm-7230-01"}}},"name":"cloud-object-storage","overview_ui":{"en":{"description":"Our most recommended service constantly adding robust features","display_name":"Cloud Object Storage","long_description":"Access your unstructured data from anywhere in the world with industry standard RESTful APIs, or via a self-service web-based portal. Enterprise availability and security lets your applications scale with confidence. You can deploy stand-alone services, or seamlessly integrate with other IBM Cloud and Bluemix services, including analytics, computing, and cognitive applications."}},"parent_id":"object-storage-group","parent_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group","pricing_tags":["paid_only","paygo"],"provider":{"name":"IBM"},"tags":["g2","ibm_created","lux","storage"],"updated":"2017-09-25T22:47:37.079Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c?include=%2A&languages=en_US%2Cen","visibility":{"exclude":{},"include":{"accounts":{"11bf145efcc3081d1706ffa5734f0672":"global","249d926cb9bb46119e3bda8ed7f7f618":"global","265d9d22597d4ee589138929093f1246":"global","2a024d99093d4c3fc409e25d553ecb21":"global","2fdf0c082d324f4684b532e0c92fffd8":"global","3d9e32cc8e2c8c33026a8717256616e6":"global","49abfb9d0abddaa5f15d6e1f37e1ac58":"global","50860b903d7d78346258b14aa2667a23":"global","999c0f832ad0cd5b7aad7a26fcb92680":"global","9e16d1fed8aa7e1bd73e7a9d23434a5a":"global","a00c731cff012576d0612c0c811772e4":"global","a252ff3406dd29d7f77d5cf5807990d7":"global","a6032862a2dd327dedae0a2159f818cd":"global","b09edf5642ebfad587c594f4d4a354b0":"global","c32adbc8c683c3f39b3e643ae19993f5":"global","ccc74502c2d2c438763eef92e0291d24":"global","d4a70ce3b153a2e5a0e1bbf5569867ba":"global","d7026b374f39f570d20984c19c6ecf63":"global","d939d87aaebc9ee4339e36e4ccc67a0a":"global","df395fb648a606d256db06262000901c":"global","f3d1407c99e9fd93246225c90067903f":"global","fab6b5b09c41c4076a01d016f0e85b47":"global"}},"owner":"a/9e16d1fed8aa7e1bd73e7a9d23434a5a","restrict":false}}],"children_url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group/%2A","created":"2017-09-21T18:21:33.96Z","catalog_crn":"crn:v1:staging:public:resource-catalog::a/2a024d99093d4c3fc409e25d553ecb21::iaas:object-storage-group","geo_tags":["us-south-aus01","us-south-dal10","us-south-dal12","us-south-dal13"],"group":true,"id":"object-storage-group","images":{"image":"https://sl-catalogapi-opsconsoledev.stage1.ng.bluemix.net/cache/99d-1554309718/assets/icons/object-storage.png"},"kind":"iaas","metadata":{"pricing":{"costs":[{"currencies":null,"part_number":"","tier_model":"","tier_quantity":"","unit":"","unit_id":"","unit_quantity":""}],"ibm_pricing":false},"ui":{"urls":{"create_url":"https://tbd.sidebyside.comparision"}}},"name":"object-storage-group2","overview_ui":{"en":{"description":"Provides flexible, cost-effective, and scalable cloud storage for unstructured data.","display_name":"Cloud Object Storage","long_description":"Access your unstructured data from anywhere in the world with industry standard RESTful APIs, or via a self-service web-based portal. Enterprise availability and security lets your applications scale with confidence. You can deploy stand-alone services, or seamlessly integrate with other IBM Cloud and Bluemix services, including analytics, computing and cognitive applications."}},"pricing_tags":["paygo"],"provider":{"name":"IBM"},"tags":["group","ibm_created","storage"],"updated":"2017-09-21T18:23:31.427Z","url":"https://resource-catalog.stage1.ng.bluemix.net/api/v1/object-storage-group?include=%2A&languages=en_US%2Cen","visibility":{"exclude":{},"include":{"accounts":{"2a024d99093d4c3fc409e25d553ecb21":"global","a00c731cff012576d0612c0c811772e4":"global","d939d87aaebc9ee4339e36e4ccc67a0a":"global"}},"owner":"a/2a024d99093d4c3fc409e25d553ecb21","restrict":false}}]}`),
   126  					),
   127  				)
   128  			})
   129  			It("should return two resources", func() {
   130  				repo := newTestResourceCatalogRepo(server.URL())
   131  				resources, err := repo.FindByName("cloud-object-storage", true)
   132  
   133  				Expect(err).ShouldNot(HaveOccurred())
   134  				Expect(resources).Should(Equal([]models.Service{{
   135  					ID:         "dff97f5c-bc5e-4455-b470-411c3edbe49c",
   136  					CatalogCRN: "crn:v1:staging:public:resource-catalog::a/9e16d1fed8aa7e1bd73e7a9d23434a5a::iaas:dff97f5c-bc5e-4455-b470-411c3edbe49c",
   137  					Name:       "cloud-object-storage",
   138  					Kind:       "iaas",
   139  					URL:        "https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c?include=%2A&languages=en_US%2Cen",
   140  					Metadata:   []byte(`{"callbacks":{"broker_proxy_url":"https://console.ng.bluemix.net","broker_url":"https://console.ng.bluemix.net"},"other":{"dashboard":{"serviceCustomNavigationItems":[{"i18n":{"en":{"label":"Buckets and objects"}},"id":"manage","subItems":[{"i18n":{"en":{"label":"Bucket overview"}},"id":"bucket_overview","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Bucket permissions"}},"id":"bucket_permissions","url":"http://console.stage1.bluemix.net/objectstorage/"}],"url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Endpoint"}},"id":"endpoint","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Usage details"}},"id":"usage","url":"http://console.stage1.bluemix.net/objectstorage/"}],"serviceNavigationOrder":["gettingStarted","manage","endpoint","credentials","connectedObjects","usage","plan"]}},"pricing":{"costs":[{"currencies":[{"amount":{"USD":"0.00"},"country":"USA"}],"part_number":"","tier_model":"","tier_quantity":"1.000","unit":"HOURS_PER_MONTH","unit_id":"HOURS_PER_MONTH","unit_quantity":""}],"ibm_pricing":false},"service":{"active":false,"async_provisioning_supported":false,"async_unprovisioning_supported":false,"bindable":false,"cf_service_name":"cos-temp-name","custom_create_page_hybrid_enabled":false,"extension":null,"iam_compatible":true,"parameters":null,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":false,"service_check_enabled":false,"service_key_supported":true,"state":"","test_check_interval":0,"type":"","unique_api_key":false,"user_defined_service":null},"sla":{"dr":{"dr":false},"tenancy":"single_tenant","terms":"http://term.condition.url"},"ui":{"side_by_side_index":1,"strings":{"en":{"bullets":[{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/api.svg","title":"S3 API (limited tooling)"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/regions.svg","title":"Regional and Cross Regional Resiliency"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/plans.svg","title":"Lite & Premium Plans"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/data.svg","title":"Flexible data classes cost optimized for your workload needs"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/security.svg","title":"Built in Security for data at rest and in transit"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/binding.svg","title":"Bluemix Application Binding"}]}},"urls":{"create_url":"https://console.stage1.bluemix.net/catalog/infrastructure/cloud-object-storage","doc_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","instructions_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","terms_url":"https://www.ibm.com/software/sla/sladb.nsf/sla/bm-7230-01"}}}`),
   141  				},
   142  					{
   143  						ID:         "dff97f5c-bc5e-4455-b470-411c3edbe49d",
   144  						CatalogCRN: "crn:v1:staging:public:resource-catalog::a/9e16d1fed8aa7e1bd73e7a9d23434a5a::iaas:dff97f5c-bc5e-4455-b470-411c3edbe49c",
   145  						Name:       "cloud-object-storage",
   146  						Kind:       "iaas",
   147  						URL:        "https://resource-catalog.stage1.ng.bluemix.net/api/v1/dff97f5c-bc5e-4455-b470-411c3edbe49c?include=%2A&languages=en_US%2Cen",
   148  						Metadata:   []byte(`{"callbacks":{"broker_proxy_url":"https://console.ng.bluemix.net","broker_url":"https://console.ng.bluemix.net"},"other":{"dashboard":{"serviceCustomNavigationItems":[{"i18n":{"en":{"label":"Buckets and objects"}},"id":"manage","subItems":[{"i18n":{"en":{"label":"Bucket overview"}},"id":"bucket_overview","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Bucket permissions"}},"id":"bucket_permissions","url":"http://console.stage1.bluemix.net/objectstorage/"}],"url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Endpoint"}},"id":"endpoint","url":"http://console.stage1.bluemix.net/objectstorage/"},{"i18n":{"en":{"label":"Usage details"}},"id":"usage","url":"http://console.stage1.bluemix.net/objectstorage/"}],"serviceNavigationOrder":["gettingStarted","manage","endpoint","credentials","connectedObjects","usage","plan"]}},"pricing":{"costs":[{"currencies":[{"amount":{"USD":"0.00"},"country":"USA"}],"part_number":"","tier_model":"","tier_quantity":"1.000","unit":"HOURS_PER_MONTH","unit_id":"HOURS_PER_MONTH","unit_quantity":""}],"ibm_pricing":false},"service":{"active":false,"async_provisioning_supported":false,"async_unprovisioning_supported":false,"bindable":false,"cf_service_name":"cos-temp-name","custom_create_page_hybrid_enabled":false,"extension":null,"iam_compatible":true,"parameters":null,"plan_updateable":true,"rc_compatible":true,"rc_provisionable":false,"service_check_enabled":false,"service_key_supported":true,"state":"","test_check_interval":0,"type":"","unique_api_key":false,"user_defined_service":null},"sla":{"dr":{"dr":false},"tenancy":"single_tenant","terms":"http://term.condition.url"},"ui":{"side_by_side_index":1,"strings":{"en":{"bullets":[{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/api.svg","title":"S3 API (limited tooling)"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/regions.svg","title":"Regional and Cross Regional Resiliency"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/plans.svg","title":"Lite & Premium Plans"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/data.svg","title":"Flexible data classes cost optimized for your workload needs"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/security.svg","title":"Built in Security for data at rest and in transit"},{"icon":"https://resource-catalog.stage1.ng.bluemix.net/static/images/g2/binding.svg","title":"Bluemix Application Binding"}]}},"urls":{"create_url":"https://console.stage1.bluemix.net/catalog/infrastructure/cloud-object-storage","doc_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","instructions_url":"https://www.stage1.ng.bluemix.net/docs/services/cloud-object-storage/getting-started.html","terms_url":"https://www.ibm.com/software/sla/sladb.nsf/sla/bm-7230-01"}}}`),
   149  					}}))
   150  			})
   151  		})
   152  
   153  	})
   154  })
   155  
   156  func newTestResourceCatalogRepo(url string) ResourceCatalogRepository {
   157  	sess, err := session.New()
   158  	if err != nil {
   159  		log.Fatal(err)
   160  	}
   161  	conf := sess.Config.Copy()
   162  	conf.Endpoint = &url
   163  
   164  	client := client.Client{
   165  		Config:      conf,
   166  		ServiceName: bluemix.ResourceCatalogrService,
   167  	}
   168  
   169  	return newResourceCatalogAPI(&client)
   170  }