示例#1
0
		a1 = app.NewApp()
		a2 = app.NewApp()

		analyzer = New(etcdStoreAdapter)
	})

	insertDesiredIntoStore := func(desired models.DesiredAppState) {
		key := "/desired/" + desired.StoreKey()
		value := desired.ToJson()

		node := storeadapter.StoreNode{
			Key:   key,
			Value: value,
		}

		etcdStoreAdapter.Set([]storeadapter.StoreNode{node})
	}

	insertActualIntoStore := func(heartbeat models.InstanceHeartbeat) {
		key := "/actual/" + heartbeat.StoreKey()
		value := heartbeat.ToJson()

		node := storeadapter.StoreNode{
			Key:   key,
			Value: value,
		}
		etcdStoreAdapter.Set([]storeadapter.StoreNode{node})
	}

	Context("When /desired and /actual are missing", func() {
		It("Should not send any start or stop messages", func() {
					for _, recordSize := range recordSizes {
						recordSize := recordSize

						Measure(fmt.Sprintf("Read/Write Performance With record size: %dbytes (will generate %d records)", recordSize, numRecords), func(b Benchmarker) {
							data := make([]storeadapter.StoreNode, numRecords)
							for i := 0; i < numRecords; i++ {
								data[i] = storeadapter.StoreNode{
									Key:   fmt.Sprintf("/record/%d", i),
									Value: randomBytes(recordSize),
									TTL:   0,
								}
							}

							b.Time("writing to the store", func() {
								err := storeAdapter.Set(data)
								Ω(err).ShouldNot(HaveOccured())
							}, StorePerformanceReport{
								Subject:       "write",
								StoreType:     storeType,
								NumStoreNodes: nodes,
								RecordSize:    recordSize,
								NumRecords:    numRecords,
								Concurrency:   concurrency,
							})

							b.Time("reading from the store", func() {
								node, err := storeAdapter.ListRecursively("/record")
								Ω(err).ShouldNot(HaveOccured())
								Ω(len(node.ChildNodes)).Should(Equal(numRecords), "Didn't find the correct number of entries in the store")
							}, StorePerformanceReport{
示例#3
0
文件: walk_test.go 项目: Zhann/hm9000
	. "github.com/onsi/gomega"
)

var _ = Describe("Walk", func() {
	var etcdStoreAdapter storeadapter.StoreAdapter
	BeforeEach(func() {
		conf, _ := config.DefaultConfig()
		etcdStoreAdapter = storeadapter.NewETCDStoreAdapter(etcdRunner.NodeURLS(), conf.StoreMaxConcurrentRequests)
		err := etcdStoreAdapter.Connect()
		Ω(err).ShouldNot(HaveOccured())

		etcdStoreAdapter.Set([]storeadapter.StoreNode{
			storeadapter.StoreNode{Key: "/desired-fresh", Value: []byte("123"), TTL: 0},
			storeadapter.StoreNode{Key: "/actual-fresh", Value: []byte("456"), TTL: 0},
			storeadapter.StoreNode{Key: "/desired/guid1", Value: []byte("guid1"), TTL: 0},
			storeadapter.StoreNode{Key: "/desired/guid2", Value: []byte("guid2"), TTL: 0},
			storeadapter.StoreNode{Key: "/menu/oj", Value: []byte("sweet"), TTL: 0},
			storeadapter.StoreNode{Key: "/menu/breakfast/pancakes", Value: []byte("tasty"), TTL: 0},
			storeadapter.StoreNode{Key: "/menu/breakfast/waffles", Value: []byte("delish"), TTL: 0},
		})
	})

	It("can recurse through keys in the store", func() {
		visited := make(map[string]string)
		Walk(etcdStoreAdapter, "/", func(node storeadapter.StoreNode) {
			visited[node.Key] = string(node.Value)
		})

		Ω(visited).Should(Equal(map[string]string{
			"/desired-fresh":           "123",
			"/actual-fresh":            "456",