github.com/cloudfoundry/libcfbuildpack@v1.91.23/services/services_test.go (about)

     1  /*
     2   * Copyright 2018-2020 the original author or authors.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *      https://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package services_test
    18  
    19  import (
    20  	"testing"
    21  
    22  	bp "github.com/buildpack/libbuildpack/services"
    23  	"github.com/cloudfoundry/libcfbuildpack/services"
    24  	"github.com/onsi/gomega"
    25  	"github.com/sclevine/spec"
    26  	"github.com/sclevine/spec/report"
    27  )
    28  
    29  func TestServices(t *testing.T) {
    30  	spec.Run(t, "Services", func(t *testing.T, when spec.G, it spec.S) {
    31  
    32  		g := gomega.NewWithT(t)
    33  
    34  		when("FindServiceCredentials", func() {
    35  			it("matches single service by BindingName", func() {
    36  				s := services.Services{Services: bp.Services{services.Service{BindingName: "test-service-1"}}}
    37  
    38  				_, ok := s.FindServiceCredentials("test-service")
    39  
    40  				g.Expect(ok).To(gomega.BeTrue())
    41  			})
    42  
    43  			it("matches single service by InstanceName", func() {
    44  				s := services.Services{Services: bp.Services{services.Service{InstanceName: "test-service-1"}}}
    45  
    46  				_, ok := s.FindServiceCredentials("test-service")
    47  
    48  				g.Expect(ok).To(gomega.BeTrue())
    49  			})
    50  
    51  			it("matches single service by Label", func() {
    52  				s := services.Services{Services: bp.Services{services.Service{Label: "test-service-1"}}}
    53  
    54  				_, ok := s.FindServiceCredentials("test-service")
    55  
    56  				g.Expect(ok).To(gomega.BeTrue())
    57  			})
    58  
    59  			it("matches single service by Tags", func() {
    60  				s := services.Services{Services: bp.Services{services.Service{Tags: []string{"test-service-1"}}}}
    61  
    62  				_, ok := s.FindServiceCredentials("test-service")
    63  
    64  				g.Expect(ok).To(gomega.BeTrue())
    65  			})
    66  
    67  			it("matches single service with Credentials", func() {
    68  				s := services.Services{Services: bp.Services{services.Service{
    69  					BindingName: "test-service-1",
    70  					Credentials: services.Credentials{"test-credential": "test-payload"},
    71  				}}}
    72  
    73  				c, ok := s.FindServiceCredentials("test-service", "test-credential")
    74  
    75  				g.Expect(c).To(gomega.Equal(services.Credentials{"test-credential": "test-payload"}))
    76  				g.Expect(ok).To(gomega.BeTrue())
    77  			})
    78  
    79  			it("does not match no service", func() {
    80  				s := services.Services{Services: bp.Services{}}
    81  
    82  				_, ok := s.FindServiceCredentials("test-service")
    83  
    84  				g.Expect(ok).To(gomega.BeFalse())
    85  			})
    86  
    87  			it("does not match multiple services", func() {
    88  				s := services.Services{Services: bp.Services{
    89  					services.Service{BindingName: "test-service-1"},
    90  					services.Service{BindingName: "test-service-2"},
    91  				}}
    92  
    93  				_, ok := s.FindServiceCredentials("test-service")
    94  
    95  				g.Expect(ok).To(gomega.BeFalse())
    96  			})
    97  
    98  			it("does not match without Credentials", func() {
    99  				s := services.Services{Services: bp.Services{services.Service{BindingName: "test-service-1"}}}
   100  
   101  				_, ok := s.FindServiceCredentials("test-service", "test-credential")
   102  
   103  				g.Expect(ok).To(gomega.BeFalse())
   104  			})
   105  		})
   106  
   107  		when("HasService", func() {
   108  
   109  			it("matches single service by BindingName", func() {
   110  				s := services.Services{Services: bp.Services{services.Service{BindingName: "test-service-1"}}}
   111  
   112  				g.Expect(s.HasService("test-service")).To(gomega.BeTrue())
   113  			})
   114  
   115  			it("matches single service by InstanceName", func() {
   116  				s := services.Services{Services: bp.Services{services.Service{InstanceName: "test-service-1"}}}
   117  
   118  				g.Expect(s.HasService("test-service")).To(gomega.BeTrue())
   119  			})
   120  
   121  			it("matches single service by Label", func() {
   122  				s := services.Services{Services: bp.Services{services.Service{Label: "test-service-1"}}}
   123  
   124  				g.Expect(s.HasService("test-service")).To(gomega.BeTrue())
   125  			})
   126  
   127  			it("matches single service by Tags", func() {
   128  				s := services.Services{Services: bp.Services{services.Service{Tags: []string{"test-service-1"}}}}
   129  
   130  				g.Expect(s.HasService("test-service")).To(gomega.BeTrue())
   131  			})
   132  
   133  			it("matches single service with Credentials", func() {
   134  				s := services.Services{Services: bp.Services{services.Service{
   135  					BindingName: "test-service-1",
   136  					Credentials: services.Credentials{"test-credential": "test-payload"},
   137  				}}}
   138  
   139  				g.Expect(s.HasService("test-service", "test-credential")).To(gomega.BeTrue())
   140  			})
   141  
   142  			it("does not match no service", func() {
   143  				s := services.Services{Services: bp.Services{}}
   144  
   145  				g.Expect(s.HasService("test-service")).To(gomega.BeFalse())
   146  			})
   147  
   148  			it("does not match multiple services", func() {
   149  				s := services.Services{Services: bp.Services{
   150  					services.Service{BindingName: "test-service-1"},
   151  					services.Service{BindingName: "test-service-2"},
   152  				}}
   153  
   154  				g.Expect(s.HasService("test-service")).To(gomega.BeFalse())
   155  			})
   156  
   157  			it("does not match without Credentials", func() {
   158  				s := services.Services{Services: bp.Services{services.Service{BindingName: "test-service-1"}}}
   159  
   160  				g.Expect(s.HasService("test-service", "test-credential")).To(gomega.BeFalse())
   161  			})
   162  		})
   163  	}, spec.Report(report.Terminal{}))
   164  }