github.com/paketoio/libpak@v1.3.1/binding_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 libpak_test 18 19 import ( 20 "fmt" 21 "testing" 22 23 "github.com/buildpacks/libcnb" 24 . "github.com/onsi/gomega" 25 "github.com/paketoio/libpak" 26 "github.com/sclevine/spec" 27 ) 28 29 func testBinding(t *testing.T, context spec.G, it spec.S) { 30 var ( 31 Expect = NewWithT(t).Expect 32 33 resolver libpak.BindingResolver 34 ) 35 36 it.Before(func() { 37 resolver.Bindings = libcnb.Bindings{} 38 }) 39 40 it("returns error if binding does not exist", func() { 41 _, ok, err := resolver.Resolve(libpak.BindingConstraint{}) 42 Expect(err).NotTo(HaveOccurred()) 43 Expect(ok).To(BeFalse()) 44 }) 45 46 it("returns error if multiple bindings exist", func() { 47 resolver.Bindings["test-binding-1"] = libcnb.NewBinding() 48 resolver.Bindings["test-binding-2"] = libcnb.NewBinding() 49 50 _, _, err := resolver.Resolve(libpak.BindingConstraint{}) 51 Expect(err).To(MatchError(fmt.Errorf("multiple bindings found for %+v in %+v", 52 libpak.BindingConstraint{}, resolver.Bindings))) 53 }) 54 55 it("filters on name", func() { 56 resolver.Bindings["test-binding-1"] = libcnb.NewBinding() 57 resolver.Bindings["test-binding-2"] = libcnb.NewBinding() 58 resolver.Bindings["test-binding-2"].Metadata["test-key"] = "test-value" 59 60 expected := libcnb.NewBinding() 61 expected.Metadata["test-key"] = "test-value" 62 63 b, ok, err := resolver.Resolve(libpak.BindingConstraint{Name: "test-binding-2"}) 64 Expect(err).NotTo(HaveOccurred()) 65 Expect(ok).To(BeTrue()) 66 Expect(b).To(Equal(expected)) 67 }) 68 69 it("filters on kind", func() { 70 resolver.Bindings["test-binding-1"] = libcnb.NewBinding() 71 resolver.Bindings["test-binding-2"] = libcnb.NewBinding() 72 resolver.Bindings["test-binding-2"].Metadata[libcnb.BindingKind] = "test-kind" 73 resolver.Bindings["test-binding-2"].Metadata["test-key"] = "test-value" 74 75 expected := libcnb.NewBinding() 76 expected.Metadata[libcnb.BindingKind] = "test-kind" 77 expected.Metadata["test-key"] = "test-value" 78 79 b, ok, err := resolver.Resolve(libpak.BindingConstraint{Kind: "test-kind"}) 80 Expect(err).NotTo(HaveOccurred()) 81 Expect(ok).To(BeTrue()) 82 Expect(b).To(Equal(expected)) 83 84 }) 85 86 it("filters on provider", func() { 87 resolver.Bindings["test-binding-1"] = libcnb.NewBinding() 88 resolver.Bindings["test-binding-2"] = libcnb.NewBinding() 89 resolver.Bindings["test-binding-2"].Metadata[libcnb.BindingProvider] = "test-provider" 90 resolver.Bindings["test-binding-2"].Metadata["test-key"] = "test-value" 91 92 expected := libcnb.NewBinding() 93 expected.Metadata[libcnb.BindingProvider] = "test-provider" 94 expected.Metadata["test-key"] = "test-value" 95 96 b, ok, err := resolver.Resolve(libpak.BindingConstraint{Provider: "test-provider"}) 97 Expect(err).NotTo(HaveOccurred()) 98 Expect(ok).To(BeTrue()) 99 Expect(b).To(Equal(expected)) 100 101 }) 102 103 it("filters on all tags", func() { 104 resolver.Bindings["test-binding-1"] = libcnb.NewBinding() 105 resolver.Bindings["test-binding-2"] = libcnb.NewBinding() 106 resolver.Bindings["test-binding-2"].Metadata[libcnb.BindingTags] = "test-tag-1\ntest-tag-2\ntest-tag-3" 107 resolver.Bindings["test-binding-2"].Metadata["test-key"] = "test-value" 108 109 expected := libcnb.NewBinding() 110 expected.Metadata[libcnb.BindingTags] = "test-tag-1\ntest-tag-2\ntest-tag-3" 111 expected.Metadata["test-key"] = "test-value" 112 113 b, ok, err := resolver.Resolve(libpak.BindingConstraint{Tags: []string{"test-tag-1", "test-tag-2"}}) 114 Expect(err).NotTo(HaveOccurred()) 115 Expect(ok).To(BeTrue()) 116 Expect(b).To(Equal(expected)) 117 }) 118 }