github.com/mmatczuk/gohan@v0.0.0-20170206152520-30e45d9bdb69/extension/extension_test.go (about) 1 // Copyright (C) 2015 NTT Innovation Institute, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 // implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 package extension_test 17 18 import ( 19 . "github.com/onsi/ginkgo" 20 . "github.com/onsi/gomega" 21 "time" 22 23 "github.com/cloudwan/gohan/extension" 24 "github.com/cloudwan/gohan/extension/otto" 25 "github.com/cloudwan/gohan/server/middleware" 26 ) 27 28 var _ = Describe("Environment manager", func() { 29 const ( 30 schemaID1 = "Wormtongue" 31 schemaID2 = "Dumbledore" 32 ) 33 var ( 34 env1 extension.Environment 35 env2 extension.Environment 36 manager *extension.Manager 37 ) 38 39 BeforeEach(func() { 40 env1 = otto.NewEnvironment("extension_test1", 41 testDB1, &middleware.FakeIdentity{}, time.Second, testSync) 42 env2 = otto.NewEnvironment("extension_test2", 43 testDB2, &middleware.FakeIdentity{}, time.Second, testSync) 44 }) 45 46 JustBeforeEach(func() { 47 manager = extension.GetManager() 48 Expect(manager.RegisterEnvironment(schemaID1, env1)).To(Succeed()) 49 }) 50 51 AfterEach(func() { 52 extension.ClearManager() 53 }) 54 55 Describe("Registering environments", func() { 56 Context("When it isn't registered", func() { 57 It("Should register it", func() { 58 Expect(manager.RegisterEnvironment(schemaID2, env2)).To(Succeed()) 59 }) 60 }) 61 62 Context("When it is registered", func() { 63 It("Should return an error", func() { 64 err := manager.RegisterEnvironment(schemaID1, env2) 65 Expect(err).To(MatchError("Environment already registered for this schema")) 66 }) 67 }) 68 }) 69 70 Describe("Getting an environment", func() { 71 Context("When it is registered", func() { 72 It("Should return it", func() { 73 env, ok := manager.GetEnvironment(schemaID1) 74 Expect(ok).To(BeTrue()) 75 Expect(env).NotTo(BeNil()) 76 }) 77 }) 78 79 Context("When it isn't registered", func() { 80 It("Should return a false ok", func() { 81 _, ok := manager.GetEnvironment(schemaID2) 82 Expect(ok).To(BeFalse()) 83 }) 84 }) 85 }) 86 87 Describe("Unregistering an environment", func() { 88 Context("When it is registered", func() { 89 It("Should unregister it", func() { 90 Expect(manager.UnRegisterEnvironment(schemaID1)).To(Succeed()) 91 }) 92 }) 93 94 Context("When it isn't registered", func() { 95 It("Should return an error", func() { 96 err := manager.UnRegisterEnvironment(schemaID2) 97 Expect(err).To(MatchError("No environment registered for this schema")) 98 }) 99 }) 100 }) 101 102 Describe("Executing a sequence of operations", func() { 103 Context("A typical sequence", func() { 104 It("Should do what expected", func() { 105 By("Getting a registered environment") 106 env, ok := manager.GetEnvironment(schemaID1) 107 Expect(ok).To(BeTrue()) 108 Expect(env).NotTo(BeNil()) 109 110 By("Successfully unregistering it") 111 Expect(manager.UnRegisterEnvironment(schemaID1)).To(Succeed()) 112 113 By("No longer returning it") 114 _, ok = manager.GetEnvironment(schemaID1) 115 Expect(ok).To(BeFalse()) 116 117 By("Registering another environment") 118 Expect(manager.RegisterEnvironment(schemaID2, env2)).To(Succeed()) 119 120 By("Getting it when requested") 121 _, ok = manager.GetEnvironment(schemaID2) 122 Expect(ok).To(BeTrue()) 123 124 By("Clearing the whole manager") 125 extension.ClearManager() 126 manager = extension.GetManager() 127 128 By("No longer returning the environment") 129 _, ok = manager.GetEnvironment(schemaID2) 130 Expect(ok).To(BeFalse()) 131 }) 132 }) 133 }) 134 })