github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/agent/mcorpc/aggregate/summary_test.go (about) 1 // Copyright (c) 2020-2022, R.I. Pienaar and the Choria Project contributors 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package aggregate 6 7 import ( 8 "sort" 9 10 . "github.com/onsi/ginkgo/v2" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("SummaryAggregator", func() { 15 var ( 16 err error 17 agg *SummaryAggregator 18 ) 19 20 BeforeEach(func() { 21 agg, err = NewSummaryAggregator([]any{}) 22 Expect(err).ToNot(HaveOccurred()) 23 }) 24 25 Describe("ProcessValue", func() { 26 It("Should process various values", func() { 27 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 28 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 29 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 30 Expect(agg.ProcessValue("a")).ToNot(HaveOccurred()) 31 32 results, err := agg.ResultStrings() 33 Expect(err).ToNot(HaveOccurred()) 34 Expect(results["1"]).To(Equal("3")) 35 Expect(results["a"]).To(Equal("1")) 36 }) 37 }) 38 39 Describe("FormattedStrings", func() { 40 It("Should calculate a correct width format", func() { 41 Expect(agg.ProcessValue("med")).ToNot(HaveOccurred()) 42 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 43 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 44 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 45 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 46 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 47 48 results, err := agg.ResultFormattedStrings("") 49 Expect(err).ToNot(HaveOccurred()) 50 Expect(results).To(Equal([]string{ 51 "looooong: 3", 52 " 1: 2", 53 " med: 1", 54 })) 55 56 results, err = agg.ResultFormattedStrings("%s: %d") 57 Expect(err).ToNot(HaveOccurred()) 58 Expect(results).To(Equal([]string{ 59 "looooong: 3", 60 "1: 2", 61 "med: 1", 62 })) 63 }) 64 }) 65 66 Describe("JSONResults", func() { 67 It("Should produce correct JSON", func() { 68 Expect(agg.ProcessValue("med")).ToNot(HaveOccurred()) 69 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 70 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 71 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 72 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 73 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 74 75 jresults, err := agg.ResultJSON() 76 Expect(err).ToNot(HaveOccurred()) 77 Expect(jresults).To(MatchJSON("{\"1\":2, \"looooong\":3, \"med\":1}")) 78 }) 79 }) 80 81 Describe("Value mapping", func() { 82 It("Should format correctly", func() { 83 agg, err = NewSummaryAggregator([]any{"item", map[string]any{ 84 "true": "enabled", 85 "false": "disabled", 86 "thing": "other thing", 87 "1": "one", 88 }}) 89 Expect(err).ToNot(HaveOccurred()) 90 91 Expect(agg.ProcessValue("true")).ToNot(HaveOccurred()) 92 Expect(agg.ProcessValue(true)).ToNot(HaveOccurred()) 93 Expect(agg.ProcessValue("false")).ToNot(HaveOccurred()) 94 Expect(agg.ProcessValue(false)).ToNot(HaveOccurred()) 95 Expect(agg.ProcessValue("false")).ToNot(HaveOccurred()) 96 Expect(agg.ProcessValue("thing")).ToNot(HaveOccurred()) 97 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 98 Expect(agg.ProcessValue("1")).ToNot(HaveOccurred()) 99 Expect(agg.ProcessValue("not mapped")).ToNot(HaveOccurred()) 100 results, err := agg.ResultFormattedStrings("") 101 Expect(err).ToNot(HaveOccurred()) 102 sort.Strings(results) 103 Expect(results).To(Equal([]string{ 104 " one: 2", 105 " enabled: 2", 106 " disabled: 3", 107 " not mapped: 1", 108 "other thing: 1", 109 })) 110 }) 111 }) 112 113 Describe("CustomFormat", func() { 114 It("Should format correctly", func() { 115 agg, err = NewSummaryAggregator([]any{"item", map[string]any{"format": "%s=%v"}}) 116 Expect(err).ToNot(HaveOccurred()) 117 118 Expect(agg.ProcessValue("med")).ToNot(HaveOccurred()) 119 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 120 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 121 Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred()) 122 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 123 Expect(agg.ProcessValue(1)).ToNot(HaveOccurred()) 124 results, err := agg.ResultFormattedStrings("") 125 Expect(err).ToNot(HaveOccurred()) 126 Expect(results).To(Equal([]string{ 127 "looooong=3", 128 "1=2", 129 "med=1", 130 })) 131 }) 132 }) 133 })