func Walk(store storeadapter.StoreAdapter, dirKey string, callback func(storeadapter.StoreNode)) { nodes, err := store.List(dirKey) if err != nil { return } for _, node := range nodes { if node.Key == "/_etcd" { continue } if node.Dir { Walk(store, node.Key, callback) } else { callback(node) } } }
AfterEach(func() { etcdAdapter.Disconnect() }) Describe("Saving desired state ", func() { BeforeEach(func() { err := store.SaveDesiredState([]models.DesiredAppState{ app1.DesiredState(0), app2.DesiredState(0), }) Ω(err).ShouldNot(HaveOccured()) }) It("can stores the passed in desired state", func() { nodes, err := etcdAdapter.List("/desired") Ω(err).ShouldNot(HaveOccured()) Ω(nodes).Should(HaveLen(2)) Ω(nodes).Should(ContainElement(storeadapter.StoreNode{ Key: "/desired/" + app1.AppGuid + "-" + app1.AppVersion, Value: app1.DesiredState(0).ToJson(), TTL: conf.DesiredStateTTL - 1, })) Ω(nodes).Should(ContainElement(storeadapter.StoreNode{ Key: "/desired/" + app2.AppGuid + "-" + app2.AppVersion, Value: app2.DesiredState(0).ToJson(), TTL: conf.DesiredStateTTL - 1, })) }) })
AfterEach(func() { etcdAdapter.Disconnect() }) Describe("Saving actual state ", func() { BeforeEach(func() { err := store.SaveActualState([]models.InstanceHeartbeat{ heartbeat1, heartbeat2, }) Ω(err).ShouldNot(HaveOccured()) }) It("can stores the passed in actual state", func() { nodes, err := etcdAdapter.List("/actual") Ω(err).ShouldNot(HaveOccured()) Ω(nodes).Should(HaveLen(2)) Ω(nodes).Should(ContainElement(storeadapter.StoreNode{ Key: "/actual/" + heartbeat1.InstanceGuid, Value: heartbeat1.ToJson(), TTL: conf.HeartbeatTTL - 1, })) Ω(nodes).Should(ContainElement(storeadapter.StoreNode{ Key: "/actual/" + heartbeat2.InstanceGuid, Value: heartbeat2.ToJson(), TTL: conf.HeartbeatTTL - 1, })) }) })
data[i] = storeadapter.StoreNode{ Key: "/actual/" + instanceHeartbeat.InstanceGuid, Value: instanceHeartbeat.ToJson(), TTL: 0, } } writeTime := b.Time("writing to the store", func() { err := storeAdapter.Set(data) Ω(err).ShouldNot(HaveOccured()) }, StorePerformanceReport{StoreType: storeType, NumStoreNodes: nodes, NumApps: numApps, Subject: "write performance"}) Ω(writeTime.Seconds()).Should(BeNumerically("<=", 30)) readTime := b.Time("reading from the store", func() { values, err := storeAdapter.List("/actual") Ω(err).ShouldNot(HaveOccured()) Ω(len(values)).Should(Equal(numApps), "Didn't find the correct number of entries in the store") }, StorePerformanceReport{StoreType: storeType, NumStoreNodes: nodes, NumApps: numApps, Subject: "read performance"}) Ω(readTime.Seconds()).Should(BeNumerically("<=", 3)) usage, err := storeRunner.DiskUsage() Ω(err).ShouldNot(HaveOccured()) b.RecordValue("disk usage in MB", float64(usage)/1024.0/1024.0, StorePerformanceReport{StoreType: storeType, NumStoreNodes: nodes, NumApps: numApps, Subject: "disk usage"}) }, 5) } }) } } })