}) Describe(".ReadRoutes", func() { It("Returns a empty list of routes", func() { routes, err := etcd.ReadRoutes() Expect(err).NotTo(HaveOccurred()) Expect(routes).To(Equal([]db.Route{})) }) Context("when only one entry is present", func() { BeforeEach(func() { route.Route = "next-route" route.IP = "9.8.7.6" route.Port = 12345 err := etcd.SaveRoute(route) Expect(err).NotTo(HaveOccurred()) }) It("Returns a list with one route", func() { routes, err := etcd.ReadRoutes() Expect(err).NotTo(HaveOccurred()) Expect(routes).To(ContainElement(route)) }) }) Context("when multiple entries present", func() { var ( route2 db.Route )
Expect(routes).To(HaveLen(2)) Expect(routes).To(ContainElement(route)) Expect(routes).To(ContainElement(route2)) }) }) }) Describe("SaveRoute", func() { Context("when there's no existing entry", func() { BeforeEach(func() { keyNotFoundError := client.Error{Code: client.ErrorCodeKeyNotFound} fakeKeysAPI.GetReturns(nil, keyNotFoundError) }) It("Creates a route if none exist", func() { err := fakeEtcd.SaveRoute(route) Expect(err).NotTo(HaveOccurred()) Expect(fakeKeysAPI.GetCallCount()).To(Equal(1)) Expect(fakeKeysAPI.SetCallCount()).To(Equal(1)) _, _, json, _ := fakeKeysAPI.SetArgsForCall(0) Expect(json).To(ContainSubstring("\"index\":0")) }) }) Context("when an entry already exists", func() { BeforeEach(func() { route.ModificationTag = models.ModificationTag{Guid: "guid", Index: 5} routeJson, err := json.Marshal(&route) Expect(err).ToNot(HaveOccurred()) fakeResp := &client.Response{Node: &client.Node{Value: string(routeJson)}} fakeKeysAPI.GetReturns(fakeResp, nil)