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  })